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

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

В частности, мне нужно конвертировать из 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".

23 ответа

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

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

Попробуйте VIM

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

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

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

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

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


Пояснительная часть!

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

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

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

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

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

Iconv(1)

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

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

Попробуйте функцию 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",

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средства:

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

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

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

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

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

iconv -f $(chardetect input.text | awk '{print $2}') -t utf-8 -o output.text

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

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

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

Попробуйте EncodingChecker

EncodingChecker на github

Средство проверки кодировки файлов - это инструмент с графическим пользовательским интерфейсом, который позволяет вам проверять кодировку текста одного или нескольких файлов. Инструмент может отображать кодировку для всех выбранных файлов или только тех файлов, которые не имеют указанных вами кодировок.

Для работы средства проверки кодировки файлов требуется.NET 4 или более поздняя версия.

Для обнаружения кодировки средство проверки кодировки файлов использует библиотеку UtfUnknown Charset Detector. Текстовые файлы UTF-16 без метки порядка следования байтов (BOM) могут быть обнаружены эвристикой.

PHP iconv()

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

Код Visual Studio

  1. Откройте файл в Visual Studio Code
  2. Повторно открыть с кодировкой : в нижней строке состояния справа вы должны увидеть текущую кодировку файла (например, «UTF-8»). Нажмите на это и выберите «Повторно открыть с кодировкой».
  3. Выберите правильную кодировку файла (например, ISO 8859-2).
  4. Убедитесь , что ваш контент отображается должным образом.
  5. Сохранить с кодировкой : теперь в нижней строке состояния должен отображаться новый формат кодировки (например, ISO 8859-2). Нажмите на это и выберите «Сохранить с кодировкой» и выберите UTF-8 (или любую новую кодировку, которую вы хотите).

ПРИМЕЧАНИЕ. ЭТО ЗАМЕНИТ ВАШ ИСХОДНЫЙ ФАЙЛ. СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИИ ПЕРВЫМ.

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

Используйте этот скрипт Python: https://github.com/goerz/convert_encoding.py Работает на любой платформе. Требуется Python 2.7.

Редактор Yudit поддерживает и конвертирует различные текстовые кодировки, работает в Linux, Windows, Mac и т. Д.

-Адам

В PowerShell:

function Recode($InCharset, $InFile, $OutCharset, $OutFile)  {
    # Read input file in the source encoding
    $Encoding = [System.Text.Encoding]::GetEncoding($InCharset)
    $Text = [System.IO.File]::ReadAllText($InFile, $Encoding)
    
    # Write output file in the destination encoding
    $Encoding = [System.Text.Encoding]::GetEncoding($OutCharset)    
    [System.IO.File]::WriteAllText($OutFile, $Text, $Encoding)
}

Recode Windows-1252 "$pwd\in.txt" utf8 "$pwd\out.txt" 

Для списка поддерживаемых имен кодировок:

https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding

Чтобы написать файл свойств (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), проблема была закончена.

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

Также существует веб-инструмент для преобразования кодировки файлов: https://webtool.cloud/change-file-encoding

Он поддерживает широкий спектр кодировок, в том числе некоторые редкие, такие как кодовая страница IBM 37.

С рубином:

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-sequences

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

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

Если приложения с графическим интерфейсом пользователя macOS - это ваш хлеб с маслом, SubEthaEdit - это текстовый редактор, к которому я обычно обращаюсь для борьбы с кодированием - его "предварительный просмотр преобразования" позволяет вам видеть все недопустимые символы в выходной кодировке и исправлять / удалять их.

И теперь он с открытым исходным кодом, так что ура им.

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

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

Другие вопросы по тегам