[C#]ファイルの書き込み時にエンコーディングプレフィックスを削除する方法

たとえば、一般的に使用される中国語のエンコーディングは、UTF8、GK2312などです。

Windowsオペレーティングシステムでは、新しく作成されたファイルの先頭に、エンコードを識別するためのいくつかの文字がプレフィックスとして追加されます。

たとえば、新しいテキストファイルを作成し、wordsを記述してHello、UTF8として保存します。Hello5バイト必要ですが、テキストサイズは8バイトです。(これはwin7システムでは依然として当てはまります。win10からエンコーディングプレフィックスが削除されたため、win10でのファイルサイズは5バイトのままです。Microsoft自体が変更されたようです。)

私たちは、使用StreamWriterファイルを生成します。

using (StreamWriter sw = new StreamWriter("a.txt"))
{
    sw.Write("Hello");  // 5 字节
}

using (StreamWriter sw = new StreamWriter("b.txt", false, Encoding.UTF8))
{
    sw.Write("Hello");  // 8 字节
}

変なことが発生しました。StreamWriterデフォルトのエンコードはUTF8で、UTF8エンコードです。ファイルサイズはどのように違うのですか?

UTF8Encoding2つのプライベート属性があります。emitUTF8IdentifierおよびはisThrowException、初期化中にコンストラクターによって渡されます。

  • emitUTF8Identifier エンコーディングプレフィックスを追加するかどうか
  • isThrowException エンコーディングエラーが発生したときにエラーが報告されるかどうかを示します

これは、コーディングプレフィックスを追加するかどうかを制御できることを示しています。

EncodingされているUTF8コードプレフィックスを追加し、次のように定義されました。

public static Encoding UTF8 {
    get {
        if (utf8Encoding == null) utf8Encoding = new UTF8Encoding(true);
        return utf8Encoding;
    }
}

StreamWriterで使用されるデフォルトのエンコーディングemitUTF8Identifier=false

internal static Encoding UTF8NoBOM {
    get { 
        if (_UTF8NoBOM == null) {
            UTF8Encoding noBOM = new UTF8Encoding(false, true);
            _UTF8NoBOM = noBOM;
        }
        return _UTF8NoBOM;
    }
}

これが、コードの最初の2つのファイルが同じサイズではない理由です。

おすすめ

転載: www.cnblogs.com/createwell/p/12731702.html