UTF-16-Dateiausgabe in cmd.exe

UTF-16-Dateiausgabe in cmd.exe
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"

OK, es wird die richtige Datei erstellt, aber im Inhalt sind Fragezeichen statt Unicode-Zeichen. Wie kann ich das beheben?

Antwort1

Ihr Code ist nicht korrekt, da 10000 keine Unicode-Codepage ist. SieheCodepage-Bezeichner.

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)

Ich bin nicht sicher, warum, aber die Eingabeaufforderung scheint sie beim Einfügen als Steuerzeichen zu interpretieren, insbesondere SOH (Start of Heading, 01), STX (Start of Text, 02) und ETX (End of Text, 03).

Positiv ist, dass PowerShell damit anscheinend richtig umgeht. Notepad++ öffnete die resultierende Textdatei automatisch als „UCS-2 Little Endian“ und zeigt die richtigen Zeichen an.


Ok, ich habe herausgefunden, warum UTF-8 bei mir nicht funktioniert hat. Die Schriftart sollte auf Lucida Console eingestellt werden, da die Standard-Rasterschriftarten keine Unicode-Unterstützung haben.

Antwort2

Sowohl als 65001.txtauch 1200.txtenthalten die gleiche Zeichenfolge:, абв™jedoch in unterschiedlicher Kodierung. Der Befehl:

chcp 65001 & type 65001.txt 

ändert die Codepage erfolgreich, zeigt aber Müll an.

Der Befehl:

type 1200.txt

zeigt die richtigen Zeichen an, aber der Befehl

for /f %A in ('type 1200.txt') do echo %A

wird angezeigt абвT.

cmd.exe kann also (mit gewissen Einschränkungen) mit der Codepage 1200 arbeiten, während ich mit der Codepage 65001 keine zufriedenstellenden Ergebnisse erziele.

verwandte Informationen