Вывод файла UTF-16 в cmd.exe

Вывод файла UTF-16 в cmd.exe
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"

ОК, файл создается правильно, но в содержании вместо символов юникода есть вопросительные знаки. Как это исправить?

решение1

Ваш код неверный, так как 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.

решение2

Оба 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.

Связанный контент