cmd.exe での UTF-16 ファイル出力

cmd.exe での UTF-16 ファイル出力
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"

正しいファイルが作成されましたが、コンテンツには Unicode 文字ではなく疑問符が含まれています。どうすれば修正できますか?

答え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 が機能しない理由が分かりました。デフォルトのラスター フォントには Unicode がサポートされていないため、フォントを Lucida Console に設定する必要があります。

答え2

と の両方65001.txt1200.txt同じ文字列が含まれていますабв™が、エンコードが異なります。コマンド:

chcp 65001 & type 65001.txt 

コードページは正常に変更されましたが、ゴミが表示されます。

コマンド:

type 1200.txt

正しい文字が表示されますが、コマンド

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

が表示されますабвT

したがって、cmd.exe はコードページ 1200 (いくつかの制限あり) で動作できますが、コードページ 65001 では満足のいく結果が得られません。

関連情報