Массово переконвертировать файлы из UTF в ANSI
iconv, mv, sh
find ./ -type f -exec recode cp1251..utf8 {} \;
2. Те символы, которые есть в ANSI имеют такую же кодировку и в UTF-8 и не требуют дополнительной конвертации.
Здесь я подразумевал, что под ANSI ты понимаешь ANSI X3.4 (т.е. ASCII)
Для произвольной же конвертации используй find + iconv.
Под ANSI чаще всего подразумевают произвольную однобайтовую (может еще MBCS, не помню) кодировку.
Windows ANSI
Since Windows GDI overrides the need for text-based line draw characters, the old OEM line-draw characters could be freed up for something more useful, like international characters and publishing symbols. An assortment of 256-character Windows ANSI character sets cover all the 8-bit languages targeted by Windows.
You can think of Windows ANSI as a lower 128, and an upper 128. The lower 128 is identical to ASCII, and the upper 128 is different for each ANSI character set, and is where the various international characters are parked.
А, я кажется понял. Это виндузовый жаргон такой, никакого отношения к ANSI не имеющий.Я тоже позанудствую. Он не указал разновидность UTF.
да-да
recodeiconv же.
iconv же.recode юзает эту либу. Но умеет юзать inplace. А с iconv надо будет создавать временные файлы и код разрастётся до полноценного баш-скрипта
[winuser-mode]А их несколько?7777 [/winuser-mode]
Дам ссылку для винюзеров:
В конце поста указана UTF-8
И это даже не UTF-16, по-моему, я не очень сильно этим интересовался.
У них вообще очень смешно получается
В винде есть Unicode — это UTF16 LittleEndian с BOM без поддержки суррогатных символов (т.е. это фикс двухбайтовая кодировка)
При этом только высшие маги знают, как убедить "консоль" не печатать в CP866.
Вернее, они не знают, у них случайно получилось.
полноценного баш-скриптаORLY?
find $TREE -type f -exec iconf -f utf-8 -t cp1251 -o /tmp/mytmpfile {} \; -exec mv /tmp/mytmpfile {} \;
Нельзя называть полноценным башскриптом одну команду, которая пишется быстрее, чем пост на флокал.
Хотя ты же кажется из секты неосиляторов NM и pulseaudio...
ну убого же
ну убого жеТвой выход?
Твой выход?http://joeyh.name/code/moreutils/
посмотри команду sponge. Но recode всё равно на мой взгляд удобнее
В винде есть Unicode — это UTF16 LittleEndian с BOM без поддержки суррогатных символов (т.е. это фикс двухбайтовая кодировка)Windows поддерживает 6 уникодных кодировок:
UTF-7, code page: 65000
UTF-8, code page: 65001
UTF-16, code page: 1200
UTF-16 Big endian, code page: 1201
UTF-32, code page: 12000
UTF-32 Big endian, code page: 12001
для файлов добавляется еще три кодировки: UTF-16 с преамбулой, UTF-32 с преамбулой и UTF-8 с преамбулой. Преамбула - это добавляемые в начало файла спец. тройка байтов, которые позволяет автоматически задавать вид кодировки: UTF8, UTF-16, UTF-16 BE, UTF -32, UTF-32 BE.
Под Ascii обычно подразумевают однобайтовую кодировку для заданного языка. Для русского - это кодировка 1251.
Для конвертации можно использовать PowerShell:
следующая строка конвертит файл из cp-1251 в utf8
$text = [System.IO.File]::ReadAllText("c:\temp\q1.txt", [System.Text.Encoding]::GetEncoding(1251));
[System.IO.File]::WriteAllText("c:\temp\q1.utf.txt", $text, [System.Text.Encoding]::GetEncoding("Utf-8"));
Windows поддерживает 6 уникодных кодировок:в каком смысле она их поддерживает? Как в CreateFileW передать в каком-то определенном из этих юникодов?
UTF-7, code page: 65000
UTF-8, code page: 65001
UTF-16, code page: 1200
UTF-16 Big endian, code page: 1201
UTF-32, code page: 12000
UTF-32 Big endian, code page: 12001
Преамбула - это добавляемые в начало файла спец. тройка байтов, которые позволяет автоматически задавать вид кодировки: UTF8, UTF-16, UTF-16 BE, UTF -32, UTF-32 BE.не обязательно тройка, зависит от кодировки. Там просто символ конкретный ставится в соответствующей кодировке, по нему можно ее определить
Под Ascii обычно подразумевают однобайтовую кодировку для заданного языка. Для русского - это кодировка 1251.ASCII — это ASCII, под ним никто не понимает 1251. Под ANSI ты хотел сказать.
в каком смысле она их поддерживает?winapi содержит функции для работы с этими форматами
Как в CreateFileW передать в каком-то определенном из этих юникодов?передать название? MultiByteToWideChar + CreateFileW
ASCII — это ASCII, под ним никто не понимает 1251. Под ANSI ты хотел сказать.поддерживаю твою поправку
поддерживаю твою поправкуНадо было отклонить. Еще бы можно было подебатировать же.
Оставить комментарий
AE169
Подскажите нормальную утилиту для массового конвертирования файлов? Нужно скормить дерево каталогов, чтобы оно сконвертировало все в ANSI из UTF-8.