Лучший способ конвертировать текстовые файлы между наборами символов?

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

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

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

Лучшие решения:

В Linux/UNIX/OS X/cygwin:

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

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

    Как отметил Ben, есть онлайн-конвертер recode (руководство), предложенный 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 Latin с кодировкой Base64 с окончанием строки Dos:

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

В Windows с Powershell (Джей Базузи):

  • 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

Примечание. Возможными значениями перечисления являются "Неизвестный, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".

Ответ 1

Автономный сервисный подход

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).

Ответ 2

Попробуйте VIM

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

Не тестируется для каждой кодировки.

Прохладная часть об этом заключается в том, что вам не нужно знать исходную кодировку

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

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


Объяснение!

  • +: используется vim для непосредственного ввода команды при открытии файла. Обычно используется для открытия файла в определенной строке: vim +14 file.txt
  • |: разделитель нескольких команд (например, ; в bash)
  • set nobomb: нет спецификации utf-8
  • set fenc=utf8: установите новую кодировку в utf-8 doc link
  • x: сохранить и закрыть файл
  • filename.txt: путь к файлу
  • ": qotes здесь из-за труб. (иначе bash будет использовать их как bash pipe)

Ответ 3

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

Ответ 4

iconv (1)

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

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

Ответ 5

Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

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

gc FILE.TXT | Out-File -en utf7 file-utf7.txt

Ответ 6

Попробуйте iconv Bash function

Я поместил это в .bashrc:

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

.., чтобы иметь возможность конвертировать файлы следующим образом:

utf8 MyClass.java

Ответ 7

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

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

Ответ 8

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 флагом -c и передающую имя файла в качестве позиционного аргумента "$1" с -- {}. Между ними выходной файл utf-8 временно называется converted.

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

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

  • -i, --mime Заставляет команду file выводить строки типа mime, а не более традиционные для человека. Таким образом, это может сказать, например, text/plain; charset=us-ascii text/plain; charset=us-ascii а не ASCII text. Команда sed обрезает это только для us-ascii как того требует iconv.

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

Ответ 9

PHP iconv()

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

Ответ 10

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

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

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

Ответ 11

Yudit редактор поддерживает и конвертирует между многими различными текстовыми кодировками, работает в linux, windows, mac и т.д.

-Adam

Ответ 12

для записи файла свойств (Java) обычно я использую это в linux (дистрибутивы mint и ubuntu):

$ native2ascii filename.properties

Например:

$ cat test.properties 
first=Execução número um
second=Execução número dois

$ native2ascii test.properties 
first=Execu\u00e7\u00e3o n\u00famero um
second=Execu\u00e7\u00e3o n\u00famero dois

PS: я набрал Execution number one/two в portugues, чтобы заставить специальные символы.

В моем случае, в первом исполнении я получил это сообщение:

$ native2ascii teste.txt 
The program 'native2ascii' can be found in the following packages:
 * gcj-5-jdk
 * openjdk-8-jdk-headless
 * gcj-4.8-jdk
 * gcj-4.9-jdk
Try: sudo apt install <selected package>

Когда я установил первый вариант (gcj-5-jdk), проблема была закончена.

Я надеюсь, что это поможет кому-то.

Ответ 15

Моим любимым инструментом для этого является Jedit (текстовый редактор на основе Java), который имеет две очень удобные функции:

  • Один, который позволяет пользователю перезагружать текст с другим кодированием (и, как таковой, для визуального контроля результата)
  • Другой, который позволяет пользователю явно выбирать кодировку (и конец строки) перед сохранением

Ответ 16

Просто измените кодировку загруженного файла в IDE IntelliJ, справа от строки состояния (внизу), где указана текущая кодировка. Он предлагает перезагрузить или конвертировать, используйте конвертировать. Убедитесь, что вы сделали резервную копию оригинального файла заранее.

Ответ 17

Как описано в Как исправить кодировку символа файла? Synalyze It! позволяет легко конвертировать на OS X между всеми кодировками, поддерживаемыми библиотека ICU.

Кроме того, вы можете отобразить несколько байтов файла, переведенного в Unicode, из всех кодировок, чтобы быстро увидеть, что является правильным для вашего файла.