Cygwin или GnuWin32 предоставляют инструменты Unix, такие как iconv
и dos2unix
(и unix2dos
). В Unix / Linux / Cygwin вы захотите использовать «windows-1252» в качестве кодировки вместо ANSI (см. Ниже). (Если вы не знаете, что ваша система использует кодовую страницу, отличную от 1252, в качестве кодовой страницы по умолчанию, в этом случае вам нужно указать iconv правильную кодовую страницу для перевода.)
Преобразовать из одного ( -f
) в другое ( -t
) с помощью:
$ iconv -f windows-1252 -t utf-8 infile > outfile
Или в форме "найди все и покори":
## this will clobber the original files! $ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
В качестве альтернативы:
## this will clobber the original files! $ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
Этот вопрос задавался много раз на этом сайте, поэтому вот дополнительная информация о «ANSI». В ответе на связанный вопрос CesarB упоминает :
В Windows есть несколько кодировок, которые называются «ANSI». На самом деле, ANSI является неправильным . Iconv не может угадать, что вы хотите.
Кодировка ANSI - это кодировка, используемая функциями «A» в Windows API (функции «W» используют UTF-16). Какая кодировка соответствует, обычно зависит от языка вашей системы Windows. Наиболее распространенным является CP 1252 (также известный как Windows-1252). Итак, когда ваш редактор говорит ANSI, это означает «что бы API-функции не использовали в качестве кодировки ANSI по умолчанию», которая является кодировкой не-Unicode по умолчанию, используемой в вашей системе (и, следовательно, обычно такой, которая используется для текстовых файлов).
На странице, на которую он ссылается, приводится этот исторический фрагмент (цитируемый из Microsoft PDF ) о происхождении CP 1252 и ISO-8859-1, другой часто используемой кодировки:
[...] это происходит из-за того факта, что кодовая страница Windows 1252 изначально была основана на проекте ANSI, который стал стандартом ISO 8859-1. Однако при добавлении кодовых точек в диапазон, зарезервированный для управляющих кодов в стандарте ISO, кодовая страница Windows 1252 и последующие кодовые страницы Windows, первоначально основанные на серии ISO 8859-x, отличались от ISO. До сегодняшнего дня нередко сообщество разработчиков, как внутри, так и за пределами Microsoft, путает кодовую страницу 8859-1 с Windows 1252, а также видит «ANSI» или «A», используемые для обозначения поддержки кодовой страницы Windows. ,