ПРЕДУПРЕЖДЕНИЕ: Вы положили Perl как тег, и это не является решением Perl. Тем не менее, это не объясняет, как вы можете быстро конвертировать файлы из одного формата кодирования в другой, и, возможно, даже поможет вам выяснить, какие кодировки ваши файлы в.
Команда iconv
может легко конвертировать файлы из одной кодировки в другой. Давайте предположим, что файл в формате UTF-8
, и вы хотите, чтобы преобразовывать его ISO-8859-1 формате:
$ iconv -f utf8 -t latin1 $utf8_file > $latin1_file
Вы можете найти список различных кодировок файлов, которые iconv
может конвертировать из или путем использования -l
параметр. iconv
имеет множество псевдонимов для различных форматов, так что вы наверняка получите все правильно, независимо от того, что вы можете набрать. Например, для ISO-8859-1, различные псевдонимы, перечисленные являются:
CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1
Конечно, это не говорит вам, что оригинальное кодирование файла на самом деле. Здесь file
может вам помочь.
У меня есть UTF-8 кодируются тестовый файл с именем text_utf.txt
:
File encoding test:
â Õ ¼ ¥
Теперь я сделаю еще одну копию файла в кодировке ISO-8859-1 формате:
$ iconv -f utf8 -t latin1 text_utf.txt > text_latin1.txt
Если я дам обоих этих файлов в команде file
, он расскажет мне свою кодировку:
$ file test_*.txt
test_latin1.txt: ISO-8859 text
test_utf8.txt: UTF-8 Unicode text
Обратите внимание, что команда file
может выводить тип кодировки, и этого может быть достаточно для использования с командой iconv
.
Несколько предостережений: не все кодирующие преобразования будут работать.Это особенно верно, если файл закодирован в utf-8
формате, который может представлять миллионы уникальных персонажей, и вы пытаетесь преобразовать его в формат, как ISO-8859-1
, который может представлять только в 255 символов:
$ iconv -f utf8 -t mac test_utf8.txt > test_macroman.text # The ¼ isn't a MacRoman character
iconv: test_utf8.txt:3:4: cannot convert
Кроме того, file
команда только смотрит на первые несколько блоков файла, поэтому, если символы, которые указывают, закодированный файл похоронен глубоко внутри файла, команда file
может не увидеть их. И также возможно, что команда file
путает два разных кодировки. file
может легко определить, есть ли файл в формате utf-8
или нет, но он может не знать, находится ли файл в одном формате кодировки в 255 байт или другой.
Это все красиво и хорошо, но я на системе Windows, вы идиот.
Я подозревал, как много, так как вы хотите конвертировать файлы из более универсален, Linux/Mac дружественный UTF-8 кодировку ISO-8859-1, который похож на Windows, кодовой страницы 1252 - стандарт кодирования файлов для Windows для Соединенных Штатов.
Все еще, вы можете найти комбинацию команд file
и iconv
, чтобы быть хорошим способом определить кодировки файлов и скрывать их от одной кодировки к другой.
Если вы находитесь в системе Windows, вы можете скачать Cygwin, который предоставит вам все стандартные утилиты GNU, найденные в системах Linux (включая полную оболочку BASH). Я нашел Cygwin полезным, когда я нахожусь в системе Windows, и вам нужно сделать что-то, что не может легко выполнить стандартный скрипт Windows BATCH - например, преобразование огромного количества файлов из одного формата в другой.
Знаете ли вы, что кодировка каждого файла? – ikegami