2

バイトオーダーマーク(BOM)なしでC#文字列データをUTF-8ファイルに書き出そうとしていますが、ANSIファイルが作成されています。

using (StreamWriter objStreamWriter = new StreamWriter(SomePath, false, new UTF8Encoding(false)))
{
objStreamWriter.Write("Hello world - Encoding no BOM but actually returns ANSI");
objStreamWriter.Close();
}

UTF8Encodingクラスコンストラクターのドキュメントによると、 encoderShouldEmitUTF8Identifierパラメーターをfalseに設定すると、バイト順マークが禁止されます。

イギリス(en-gb)コンピューターで.NETFramework4.5を使用しています。以下は、UTF8Encodingが配置されていることを示すScreenWriterオブジェクトのスクリーンショットです

StreamWriterオブジェクト

では、なぜこの操作からANSIファイル(Notepad ++でチェック)を取得するのですか?

4

3 に答える 3

1

ファイルに書き込んでいるサンプル文字列は、ASCII範囲の文字のみで構成されています。ASCII範囲は、ASCII、UTF-8、およびほとんど(すべて?)のANSIコードページで共有されます。したがって、BOMがない場合、Notepad ++はUTF-8またはANSIのどちらを意味するのかを示しておらず、デフォルトでANSIになっているようです。

于 2012-12-15T20:52:00.660 に答える
1

BOMとUnicode文字がない場合、Notepad ++がそれをUTF-8としてどのように認識すると思いますか?UTF-8、ANSI、ASCIIはすべて、出力している文字と同じですか?

(一部のUnicode文字を含めても、Notepad ++は正しいエンコーディングを推測するのに苦労する場合があります。)

于 2012-12-15T20:53:17.320 に答える
0

「Helloworld-BOMをエンコードしないが、実際にはANSIを返す」では、UTF8とANSIで異なる方法でエンコードされる文字はありません。BOMがないため、Notepad ++は、「特殊文字」がないため、ファイルがANSIでエンコードされていることを示します。ファイルに「é、à、ê」文字を追加してみてください。Notepad++は、BOMなしでUTF8でエンコードされていることを示します。

于 2012-12-15T20:52:29.600 に答える