it-swarm-ru.tech

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

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

В частности, мне нужно конвертировать из 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 , есть онлайн-конвертер, использующий iconv .

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

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

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

    $ recode utf8..l9 in.txt
    

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

    Преобразовать переводы строк из 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».

486
Antti Kissaniemi

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

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

214
Troels Arvin

Попробуйте 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 ссылка на документацию
  5. x: сохранить и закрыть файл
  6. filename.txt: путь к файлу
  7. ": цитаты здесь из-за каналов. (иначе bash будет использовать их как трубу bash)
79
Boop

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

35
Cheekysoft

iconv (1)

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

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

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

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

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

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

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

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

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

utf8 MyClass.Java
14
Arne Evertsson

Попробуйте Notepad ++

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

13
Jeremy Glover

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 изобилие .

9
Serge Stroobandt

PHP iconv ()

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

3
user15096

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

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

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

2
lalthomas

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

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

1
Maciel Bombonato

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

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

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

0
kinORnirvana

С рубином:

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

0
Dorian

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

0
Nikolai Varankine