[C #] Comment supprimer le préfixe d'encodage lors de l'écriture de fichiers

Nous savons tous que les fichiers ont des encodages différents, par exemple, les encodages chinois couramment utilisés sont: UTF8, GK2312, etc.

Dans le système d'exploitation Windows, le fichier nouvellement créé sera préfixé de quelques caractères au début pour identifier l'encodage.

Par exemple, créez un nouveau fichier texte, écrivez des mots Helloet enregistrez-le au format UTF8. HelloCela prend 5 octets, mais la taille du texte est de 8 octets. (C'est toujours le cas sous le système win7, le préfixe d'encodage a été supprimé de win10, donc la taille du fichier sous win10 est toujours de 5 octets. Il semble que Microsoft lui-même ait changé.)

Nous utilisons StreamWriterpour générer le fichier.

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 字节
}

Quelque chose de bizarre s'est produit. StreamWriterL'encodage par défaut est UTF8, qui est l'encodage UTF8. Comment la taille du fichier peut-elle être différente?

UTF8EncodingIl existe deux attributs privés: emitUTF8Identifieret isThrowExceptiontransmis par le constructeur lors de l'initialisation.

  • emitUTF8Identifier Indique s'il faut ajouter un préfixe d'encodage
  • isThrowException Indique si une erreur est signalée en cas d'erreur de codage

Cela montre que l'ajout d'un préfixe de codage peut être contrôlé.

EncodingSont UTF8définis comme suit, ajouter le préfixe de code.

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

Le StreamWritercodage par défaut utilisé dans emitUTF8Identifier=false:

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

C'est pourquoi les deux fichiers du code au début n'ont pas la même taille.

Je suppose que tu aimes

Origine www.cnblogs.com/createwell/p/12731702.html
conseillé
Classement