Преобразуйте пакет файлы для кодирования

Как я могу преобразовать пакет файлы в каталоге для их кодирования (например, ANSI-> UTF-8) с командой или инструментом?

Для единственных файлов редактор помогает, но как сделать массовое задание файлов?

46
задан 17.05.2017, 18:18

4 ответа

Cygwin или GnuWin32 обеспечивают инструменты Unix как iconv и dos2unixunix2dos). Под Unix/Linux/Cygwin Вы захотите использовать "окна 1252" в качестве кодирования вместо ANSI (см. ниже). (Если Вы не знаете, что Ваша система использует кодовую страницу кроме 1252 как его кодовая страница по умолчанию, в этом случае необходимо будет сказать iconv правильную кодовую страницу для перевода из.)

Преобразуйте из одного (-f) к другому (-t) с:

$ iconv -f windows-1252 -t utf-8 infile > outfile

Или в форме find-all-and-conquer:

## 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 упоминает:

Существует несколько кодировок, которые называют "ANSI" в Windows. На самом деле 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, другое часто используемое кодирование:

[...] это прибывает из того, что кодовая страница 1252 Windows первоначально была основана на проекте ANSI, который стал стандартом ISO 8859-1. Однако в добавлении кодовых точек к диапазону, зарезервированному для кодов управления в стандарте ISO, кодовой странице 1252 Windows и последующих кодовых страницах Windows первоначально на основе ISO 8859-x ряд, отклоненный от ISO. По сей день весьма распространено иметь сообщество разработчиков, как внутри, так и за пределами Microsoft, перепутать 8859-1 кодовую страницу с Windows 1252, а также видеть "ANSI", или "A" раньше показывал поддержку кодовой страницы Windows.

36
ответ дан 07.12.2019, 08:35

Страница Wikipedia на новых строках имеет раздел по утилитам преобразования.

Это кажется Вашим лучшим выбором для преобразования с помощью только поставки инструментов Windows с:

TYPE unix_file | FIND "" /V > dos_file
6
ответ дан 07.12.2019, 08:35

Существует dos2unix на Unix.
Был другой подобный инструмент для Windows (другой касательно здесь).

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

0
ответ дан 07.12.2019, 08:35

с powershell можно сделать что-то вроде этого:

%  get-content IN.txt | out-file -encoding ENC -filepath OUT.txt

в то время как ENC - что-то как unicode, ASCII, utf8, utf32. контроль '-файл справки'.

для преобразования всех *.txt файлов в каталоге к utf8 делают что-то вроде этого:

% foreach($i in ls -name DIR/*.txt) { \
       get-content DIR/$i | \
       out-file -encoding utf8 -filepath DIR2/$i \
  }

который создает преобразованную версию каждого .txt файла в DIR2.

Править: Заменять файлы во всем использовании подкаталогов:

% foreach($i in ls -recurse -filter "*.java") {
    $temp = get-content $i.fullname
    out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
28
ответ дан 07.12.2019, 08:35

Теги

Похожие вопросы