Какой самый быстрый и простой инструмент или метод для преобразования текстовых файлов между наборами символов?
В частности, мне нужно конвертировать из 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
Как отметил Бен , есть онлайн-конвертер, использующий 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 ( Джей Базузи ):
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».
- CsCvt - конвертер наборов символов Kalytta - еще один замечательный инструмент для конвертации в Windows для командной строки.
iconv -f FROM-ENCODING -t TO-ENCODING file.txt
Также есть инструменты на основе iconv на многих языках.
В Linux вы можете использовать очень мощную команду recode, чтобы попытаться преобразовать различные кодировки, а также любые проблемы с окончанием строки. recode -l покажет вам все форматы и кодировки, между которыми инструмент может конвертироваться. Вероятно, это будет ОЧЕНЬ длинный список.
LF
? Есть /CR
и /CR-LF
нет/LF
Автономный сервисный подход
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).
iconv -l | grep UTF
расскажет вам обо всех UTF-кодировках, которые поддерживает ваша копия iconv. chardet in.txt
для генерации лучшего предположения. Результат можно использовать как ENCODING в iconv -f ENCODING
. illegal input sequence at position
сообщений), и заменить «странные» символы с «похожими» символы: iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt
. ex
) ниже . Дополнительная информация: (1) вам (вероятно) не нужно указывать параметр -f
(from) с помощью iconv
. (2) file --mime-encoding <file/s>
команда может помочь вам выяснить кодировку в первую очередь. file
команда сообщила, что мой источник UTF-16 Little Endian; работает iconv -f UTF-16 -t UTF-8...
неправильно преобразовал его в ASCII, я должен был явно указать, iconv -f UTF-16LE...
чтобы вывести UTF-8Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT
Кратчайшая версия, если вы можете предположить, что входная спецификация верна:
gc FILE.TXT | Out-File -en utf7 file-utf7.txt
gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt
Set-Content
работает лучше, чем Out-File
? file-utf8.txt
файл для ввода, так как они имели одинаковый выходной файл file-utf7.txt
. gc -en Ascii readme.html | Out-File -en UTF8 readme.html
но он конвертирует файл в UTF-8, но тогда он пуст! Notepad ++ говорит, что файл в формате Ansi, но, как я понимаю, читается, что это даже не правильный набор символов ?? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFPHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
Попробуйте функцию iconv Bash
Я положил это в .bashrc
:
utf8()
{
iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
rm $1
mv $1.tmp $1
}
.. чтобы иметь возможность конвертировать файлы так:
utf8 MyClass.java

в начале файла. Попробуйте Notepad ++
В Windows я смог использовать Notepad ++ для преобразования из ISO-8859-1 в UTF-8 . Нажмите "Encoding"
и затем "Convert to UTF-8"
.
Как описано в разделе Как исправить кодировку символов в файле? Synalyze It! позволяет легко конвертировать в OS X все кодировки, поддерживаемые библиотекой ICU .
Кроме того, вы можете отобразить несколько байтов файла, переведенного в Unicode из всех кодировок, чтобы быстро увидеть, какой из них подходит для вашего файла.
Попробуйте 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-8x
: Сохранить и закрыть файлfilename.txt
: путь к файлу"
: цитаты здесь из-за труб. (иначе bash будет использовать их как трубу bash)
vim -b
илиhead file.txt|cat -e
find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | set fenc=utf8 | x' {} \;
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
,--brief
Не добавляйте имена файлов в выходные строки (краткий режим).-i
,--mime
Заставляет команду file выводить строки типа mime, а не более традиционные для человека. Таким образом, это может сказать, например,text/plain; charset=us-ascii
а неASCII text
. Командаsed
обрезает это только так,us-ascii
как того требуетiconv
.
Команда find
очень полезна для такой автоматизации управления файлами. Нажмите здесь, чтобы узнать большеfind
.
find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -b --mime-encoding "$1" | awk "{print toupper(\$0)}") -t UTF-8 > converted "$1" && mv converted "$1"' -- {} \;
sed
команда специально предназначена для автоматического определения кодировки символов. Я расширил ответ, чтобы объяснить это сейчас. В отношении читателей было бы вежливо удалить все оставшиеся не относящиеся к делу комментарии. Спасибо. чтобы написать файл свойств (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: я написал исполнение номер один / два на португальском языке, чтобы заставить специальные символы.
В моем случае при первом исполнении я получил это сообщение:
$ 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), проблема была закончена.
Я надеюсь, что это поможет кому-то.
DOS / Windows: используйте кодовую страницу
chcp 65001>NUL
type ascii.txt > unicode.txt
Команда chcp
может быть использована для изменения кодовой страницы. Кодовая страница 65001 является именем Microsoft для UTF-8. После установки кодовой страницы выходные данные, генерируемые следующими командами, будут иметь установленную кодовую страницу.
С рубином:
ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))"
Источник: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequence
Используйте этот скрипт Python: https://github.com/goerz/convert_encoding.py Работает на любой платформе. Требуется Python 2.7.
Мой любимый инструмент для этого - Jedit (текстовый редактор на основе Java), который имеет две очень удобные функции:
- Тот, который позволяет пользователю перезагрузить текст с другой кодировкой (и, таким образом, визуально контролировать результат)
- Еще один, который позволяет пользователю явно выбирать кодировку (и конец строки) перед сохранением
Просто измените кодировку загруженного файла в IDE IntelliJ, справа от строки состояния (внизу), где указана текущая кодировка. Он предлагает перезагрузить или конвертировать, используйте конвертировать. Убедитесь, что вы сделали резервную копию оригинального файла заранее.
Если приложения MacOS с графическим пользовательским интерфейсом - ваш хлеб и масло, SubEthaEdit - это текстовый редактор , к которому я обычно обращаюсь для кодирования-споров - его «предварительный просмотр конверсии» позволяет вам видеть все недопустимые символы в выходной кодировке и исправлять / удалять их.
И это с открытым исходным кодом , так что Yay для них
gc -en Ascii readme.html | Out-File -en UTF8 readme.html
но он конвертирует файл в UTF-8, но тогда он пуст! Notepad ++ говорит, что файл в формате Ansi, но, как я понимаю, читается, что это даже не правильный набор символов ?? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFrecode
будет действовать как фильтр, если вы не передадите ему имя файла, например:recode utf8..l9 < in.txt > out.txt
enca
, вам не нужно указывать кодировку ввода. Достаточно часто просто указать язык:enca -L ru -x utf8 FILE.TXT
.iconv -f UTF-32 -t UTF-8 input.csv > output.csv
сохраненных только около семисот тысяч строк, только трети. С помощью версии на местеiconv -f UTF-32 -t UTF-8 file.csv
успешно преобразуются все 2 миллиона плюс строк.