chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"
ОК, он создает правильный файл, но в содержимом вместо знаков Юникода есть вопросительные знаки. Как это исправить?
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"
ОК, он создает правильный файл, но в содержимом вместо знаков Юникода есть вопросительные знаки. Как это исправить?
Ваш код неверен, так как 10000 не является кодовой страницей Unicode. См. Идентификаторы кодовой страницы.
10000 macintosh MAC Roman; Western European (Mac)
...
1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
...
12000 utf-32 Unicode UTF-32, little endian byte order; available only to managed applications
12001 utf-32BE Unicode UTF-32, big endian byte order; available only to managed applications
...
65000 utf-7 Unicode (UTF-7)
65001 utf-8 Unicode (UTF-8)
Я не уверен, почему, но командная строка, кажется, интерпретирует их как управляющие символы при вставке, в частности, SOH (начало заголовка, 01), STX (начало текста, 02) и ETX (конец текста, 03).
С другой стороны, PowerShell, похоже, справляется с этим правильно. Notepad++ автоматически открыл результирующий текстовый файл как «UCS-2 Little Endian» и отображает правильные символы.
Хорошо, я понял, почему UTF-8 не работает для меня. Шрифт должен быть установлен на Lucida Console, поскольку растровые шрифты по умолчанию не поддерживают Unicode.
И 65001.txt
и 1200.txt
содержат одну и ту же строку:абв™
но в разной кодировке. Команда:
chcp 65001 & type 65001.txt
успешно изменяет кодовую страницу, но отображает мусор.
Команда:
type 1200.txt
отображает правильные символы, но команда
for /f %A in ('type 1200.txt') do echo %A
отображает абвT
.
Таким образом, cmd.exe способен работать с кодовой страницей 1200 (с некоторыми ограничениями), в то время как я не могу получить удовлетворительных результатов с кодовой страницей 65001.