Лучший способ конвертировать текстовые файлы между наборами символов? - PullRequest
495 голосов
/ 15 сентября 2008

Какой самый быстрый и простой инструмент или метод для преобразования текстовых файлов между наборами символов?

В частности, мне нужно конвертировать из UTF-8 в ISO-8859-15 и наоборот.

Все идет: одна строка на вашем любимом языке сценариев, инструменты командной строки или другие утилиты для ОС, веб-сайтов и т.д.

Лучшие решения на данный момент:

В Linux / UNIX / OS X / cygwin:

  • Gnu iconv предложено Троэльс Арвин лучше всего использовать в качестве фильтра . Кажется, это универсально доступно. Пример:

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
    

    Как указывает Бен , существует онлайн-конвертер с использованием iconv .

  • Gnu перекодировать ( руководство ), предложенное Cheekysoft , преобразует один или несколько файлов на месте . Пример:

    $ recode UTF8..ISO-8859-15 in.txt
    

    Этот использует более короткие псевдонимы:

    $ recode utf8..l9 in.txt
    

    Recode также поддерживает поверхностей , которые можно использовать для преобразования между различными типами окончания строки и кодировками:

    Конвертировать переводы строк из LF (Unix) в CR-LF (DOS):

    $ recode ../CR-LF in.txt
    

    Файл кодирования Base64:

    $ recode ../Base64 in.txt
    

    Вы также можете комбинировать их.

    Преобразование файла UTF8 в кодировке Base64 с окончаниями строк Unix в файл Latin 1 в кодировке Base64 с окончаниями строк Dos:

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

В Windows с Powershell ( Jay Bazuzi ):

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (хотя поддержка ISO-8859-15 не поддерживается; в нем говорится, что поддерживаются кодировки unicode, utf7, utf8, utf32, ascii, bigendianunicode, default и oem.)

Редактировать

Вы имеете в виду поддержку iso-8859-1? Использование "String" делает это, например, для наоборот

gc -en string in.txt | Out-File -en utf8 out.txt

Примечание. Возможные значения перечисления: «Неизвестно, Строка, Юникод, Байт, BigEndianUnicode, UTF8, UTF7, Ascii».

Ответы [ 16 ]

220 голосов
/ 15 сентября 2008

Автономная утилита подход

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

Вам не нужно указывать ни один из этих аргументов. По умолчанию они будут соответствовать вашей текущей локали, обычно UTF-8.

80 голосов
/ 30 сентября 2015

Попробуйте VIM

Если у вас есть vim, вы можете использовать это:

Не проверено для каждой кодировки.

Самое интересное в этом то, что вам не нужно знать кодировку источника

vim +"set nobomb | set fenc=utf8 | x" filename.txt

Помните, что эта команда изменяет непосредственно файл


Объяснительная часть!

  1. +: Используется vim для непосредственного ввода команды при открытии файла. Обычно используется для открытия файла по определенной строке: vim +14 file.txt
  2. |: разделитель нескольких команд (например, ; в bash)
  3. set nobomb: нет utf-8 BOM
  4. set fenc=utf8: установить новую кодировку в utf-8 doc link
  5. x: сохранить и закрыть файл
  6. filename.txt: путь к файлу
  7. ": цитаты здесь из-за труб. (иначе bash будет использовать их как трубу bash)
36 голосов
/ 15 сентября 2008

В Linux вы можете использовать очень мощную команду recode , чтобы попытаться преобразовать различные кодировки, а также любые проблемы с окончанием строки. recode -l покажет вам все форматы и кодировки, между которыми инструмент может конвертироваться. Вероятно, это будет ОЧЕНЬ длинный список.

20 голосов
/ 15 сентября 2008

Iconv (1)

iconv -f FROM-ENCODING -t TO-ENCODING file.txt

Также есть инструменты на основе iconv на многих языках.

19 голосов
/ 15 сентября 2008
Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

Самая короткая версия, если можно предположить, что входная спецификация верна:

gc FILE.TXT | Out-File -en utf7 file-utf7.txt
16 голосов
/ 06 декабря 2011

Попробуйте iconv Bash функцию

Я положил это в .bashrc:

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

.. чтобы можно было конвертировать файлы так:

utf8 MyClass.java
13 голосов
/ 07 июня 2012

Попробуйте Блокнот ++

В Windows мне удалось использовать Notepad ++ для преобразования ISO-8859-1 в UTF-8 . Нажмите "Encoding", а затем "Convert to UTF-8".

9 голосов
/ 28 августа 2016

Oneliner с использованием find, с автоматическим обнаружением

Кодировка символов всех соответствующих текстовых файлов автоматически определяется , и все соответствующие текстовые файлы преобразуются в utf-8 кодировку:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Для выполнения этих шагов используется вспомогательная оболочка sh с -exec, однострочник с флагом -c и передача имени файла в качестве позиционного аргумента "$1" с -- {}. В промежутке выходной файл utf-8 временно называется converted.

При этом file -bi означает:

  • -b, - краткое
    Не добавляйте имена файлов в выходные строки (краткий режим).

  • -i, --mime
    Заставляет команду file выводить строки типа mime, а не более традиционные для человека. Таким образом, он может сказать ‘текст / обычный; charset = us-ascii ’, а не« ASCII text ».

Команда find очень полезна для такой автоматизации управления файлами.

Нажмите здесь для больше find изобилие .

3 голосов
/ 17 сентября 2008

PHP iconv ()

iconv("UTF-8", "ISO-8859-15", $input);

2 голосов
/ 27 июня 2017

DOS / Windows: используйте Кодовая страница

chcp 65001>NUL
type ascii.txt > unicode.txt

Команда chcp может использоваться для изменения кодовой страницы. Кодовая страница 65001 - это имя Microsoft для UTF-8. После установки кодовой страницы выходные данные, генерируемые следующими командами, будут иметь установленную кодовую страницу.

...