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. ,
Не используйте одно и то же имя файла для ввода и вывода! iconvкажется, обрезать файлы до 32 768 байт, если они превышают этот размер. Когда он пишет в файле, из которого он пытается прочитать, ему удается выполнить работу, если файл достаточно мал, иначе он обрезает файл без какого-либо предупреждения ...
Niavlys
1
К вашему сведению Этот вопрос помечен osx, и похоже, что ни одна из команд convert-all не работает на Yosemite или El Cap. Версия iconv Apples не поддерживает --verbose или -o, а другой тип перенаправления синтаксиса stdout по какой-то причине не работает, а просто отправляет его на обычный stdout.
Скотт Макинтайр
28
с PowerShell вы можете сделать что-то вроде этого:
Преобразование из ANSI в UTF через ваше первое предложение стирает весь контент моего текстового файла ...
Acroneos
@Acroneos: тогда вы допустили ошибку: файл IN.txt, файл OUT.txt ... таким образом невозможно перезаписать оригинал. если вы использовали одно и то же имя файла для IN.txt и OUT.txt, то, очевидно, вы перезаписываете файл, из которого читаете.
Акира
Powershell преобразует в UTF с спецификацией. найти и iconv может быть намного проще.
17
6
На странице Википедии на новых строках есть раздел, посвященный конверсионным утилитам .
Похоже, это лучший выбор для конверсии, использующей только те инструменты, которые поставляются с Windows:
UTFCast - это конвертер Unicode для Windows, который поддерживает пакетный режим. Я пользуюсь платной версией и мне вполне комфортно с ней.
UTFCast - это конвертер Unicode, который позволяет вам конвертировать все текстовые файлы в кодировки UTF одним щелчком мыши. Вы можете использовать его для преобразования каталога, полного текстовых файлов, в кодировки UTF, включая UTF-8, UTF-16 и UTF-32, в выходной каталог, сохраняя при этом структуру каталогов исходных файлов. Даже не имеет значения, имеет ли ваш текстовый файл другое расширение, UTFCast может автоматически обнаруживать текстовые файлы и конвертировать их.
Кажется, они не могут конвертировать в одну и ту же папку, только в другую папку назначения.
Уве Кейм
Pro версия позволяет конвертировать на месте. $ 20 / 3months. вращающийся
screw.com/utfcast-version-comparison.aspx
О, экспресс (бесплатная) версия бесполезна - она только "Обнаруживает" utf-8 С БОМ !! (каждый может сделать это ). Только Pro версия, которая автоматически обновляется каждые 3 месяца по 20 долларов за штуку, будет автоматически обнаружена. Цена крутая для не предпринимателя пользователя. И остерегайтесь, если вы попробуете базовую версию, и ваш файл уже будет utf-8 (без BOM), тогда этот конвертер обнаружит его как ASCII, а затем (повторно) "конвертирует" его в utf-8, что может привести к бреду , Знайте, если это, прежде чем пытаться экспресс-версию! У них есть демо-версия для профессионалов, которая не выдает результатов - бессмысленно ИМХО, потому что не может проверить результаты перед покупкой!
Шерил Хохман
3
Oneliner с использованием find, с автоматическим обнаружением
Кодировка символов всех соответствующих текстовых файлов определяется автоматически, и все соответствующие текстовые файлы преобразуются в utf-8кодировку:
Для выполнения этих шагов, к югу от оболочки shиспользуются с -exec, работает один вкладыш с -cфлагом, и передавая имя файла в качестве позиционного аргумента "$1"с -- {}. Между ними utf-8выходной файл временно назван converted.
Команда findочень полезна для такой автоматизации управления файлами.
В моем сценарии использования мне требовалось автоматическое обнаружение кодировки ввода, и там было много файлов с Windows-1250кодировкой, для которых команда file -bi <FILE>возвращается charset=unknown-8bit. Это недопустимый параметр для iconv.
Ответы:
Cygwin или GnuWin32 предоставляют инструменты Unix, такие как
iconv
иdos2unix
(иunix2dos
). В Unix / Linux / Cygwin вы захотите использовать «windows-1252» в качестве кодировки вместо ANSI (см. Ниже). (Если вы не знаете, что ваша система использует кодовую страницу, отличную от 1252, в качестве кодовой страницы по умолчанию, в этом случае вам нужно указать iconv правильную кодовую страницу для перевода.)Преобразовать из одного (
-f
) в другое (-t
) с помощью:Или в форме «найди все и покори»:
В качестве альтернативы:
Этот вопрос задавался много раз на этом сайте, так что вот некоторая дополнительная информация о «ANSI». В ответе на связанный вопрос CesarB упоминает :
На странице, на которую он ссылается, приводится этот исторический фрагмент (цитируемый из Microsoft PDF ) о происхождении CP 1252 и ISO-8859-1, другой часто используемой кодировки:
источник
iconv
кажется, обрезать файлы до 32 768 байт, если они превышают этот размер. Когда он пишет в файле, из которого он пытается прочитать, ему удается выполнить работу, если файл достаточно мал, иначе он обрезает файл без какого-либо предупреждения ...с PowerShell вы можете сделать что-то вроде этого:
в то время как ENC - это что-то вроде юникода, ascii, utf8, utf32. оформить заказ 'справка вне файла'.
чтобы преобразовать все файлы * .txt в каталоге в utf8, сделайте что-то вроде этого:
который создает преобразованную версию каждого файла .txt в DIR2.
РЕДАКТИРОВАТЬ: Для замены файлов во всех подкаталогах используйте:
источник
На странице Википедии на новых строках есть раздел, посвященный конверсионным утилитам .
Похоже, это лучший выбор для конверсии, использующей только те инструменты, которые поставляются с Windows:
источник
UTFCast - это конвертер Unicode для Windows, который поддерживает пакетный режим. Я пользуюсь платной версией и мне вполне комфортно с ней.
источник
Oneliner с использованием find, с автоматическим обнаружением
Кодировка символов всех соответствующих текстовых файлов определяется автоматически, и все соответствующие текстовые файлы преобразуются в
utf-8
кодировку:Для выполнения этих шагов, к югу от оболочки
sh
используются с-exec
, работает один вкладыш с-c
флагом, и передавая имя файла в качестве позиционного аргумента"$1"
с-- {}
. Между нимиutf-8
выходной файл временно названconverted
.Команда
find
очень полезна для такой автоматизации управления файлами.Нажмите здесь, чтобы узнать больше
find
.источник
iconv -f original_charset -t utf-8 originalfile > newfile
выполните указанную выше команду в цикле for.
источник
Используйте этот скрипт Python: https://github.com/goerz/convert_encoding.py. Он работает на любой платформе. Требуется Python 2.7.
источник
Есть
dos2unix
на Unix.Был еще один аналогичный инструмент для Windows ( еще один ссылка здесь ).
Как я могу конвертировать между текстовыми файлами Unix и Windows? есть еще несколько хитростей
источник
dos2unix
полезно для преобразования разрывов строк , но OP ищет преобразование кодировок символов.Вы можете использовать EncodingMaster . Он бесплатный, имеет версию для Windows, Linux и Mac OS X и работает действительно хорошо.
источник
В моем сценарии использования мне требовалось автоматическое обнаружение кодировки ввода, и там было много файлов с
Windows-1250
кодировкой, для которых командаfile -bi <FILE>
возвращаетсяcharset=unknown-8bit
. Это недопустимый параметр дляiconv
.У меня были лучшие результаты с Enca .
Конвертировать все файлы с расширением TXT в UTF-8
источник