9

Console.WriteLine を使用してテキストを出力する小さな c# コンソール プログラムがあります。次に、この出力を次のようなテキスト ファイルにパイプします。

c:myprogram > textfile.txt

ただし、/u スイッチを使用して cmd を開始しても、ファイルは常に ansi テキスト ファイルです。cmd /? /u スイッチについて次のように述べています。

/U パイプまたはファイルへの内部コマンドの出力を Unicode にします

そして、私が行うとき、それは確かに違いを生みます

c:echo "foo" > text.txt

text.txt は unicode (BOM なし)

コンソール プログラムの出力を新しいファイルにパイプしても同様に Unicode ファイルが作成されないのはなぜですか。

Windows Power Shell (正しい BOM を含む Unicode ファイルを生成する) を使用しているだけですが、cmd でそれを行う方法を知りたいです。

ありがとう!

4

2 に答える 2

6

/U スイッチは、ドキュメントにあるように、内部コマンドが Unicode 出力を生成するかどうかに影響します。あなたのプログラムは cmd.exe の内部コマンドの 1 つではないため、/U オプションは影響しません。

Unicode テキスト ファイルを作成するには、プログラムが Unicode テキストを生成していることを確認する必要があります。

それでも十分ではないかもしれませんが。コンソール プログラムで Unicode テキストを記述する方法を説明しているJunfeng Zhang のこのブログに出会いました。標準出力ハンドルのファイルタイプをチェックします。文字ファイル (コンソールまたは LPT ポート) の場合は、WriteFileW を呼び出します。他のすべての種類のハンドル (ディスク ファイルとパイプを含む) については、出力文字列をコンソールの現在のコード ページに変換します。残念ながら、それが .Net 用語にどのように変換されるかはわかりません。

于 2008-11-12T21:49:15.897 に答える
2

mscorlib が Console.WriteLine を実装する方法を調べたところ、 GetConsoleOutPutCPの呼び出しに基づいて、使用するテキスト出力エンコーディングを決定しているようです。したがって、返されたコードページはPSコンソールとcmdコンソールのコードページが異なるため、cmdから実行したときにプログラムが実際にansiのみを出力すると推測しています(ただし、まだ確認していません)。

于 2008-11-12T22:09:23.830 に答える