質問

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

c:myprogram> textfile.txt

ただし、/ uスイッチを指定してcmdを起動した場合でも、ファイルは常にansiテキストファイルです。 cmd /? / uスイッチについて述べています:

  

/ Uは、内部の出力を引き起こします   Unicodeまたはパイプへのコマンド

そして、実際に違いを生みます。

c:echo" foo" > text.txt

text.txtはユニコード(BOMなし)

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

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

ありがとう!

役に立ちましたか?

解決

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

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

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

他のヒント

mscorlibがConsole.WriteLineを実装する方法を見て、 GetConsoleOutPutCP 。したがって、返されるコードページは、cmdコンソールよりもPSコンソールの方が異なるものであると推測しています(したがって、私のプログラムはcmdから実行するときにansiのみを出力します)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top