[C #] Cómo eliminar el prefijo de codificación al escribir archivos

Todos sabemos que los archivos tienen diferentes codificaciones, por ejemplo, las codificaciones chinas más utilizadas son: UTF8, GK2312, etc.

En el sistema operativo Windows, el archivo recién creado tendrá como prefijo algunos caracteres al principio para identificar la codificación.

Por ejemplo, cree un nuevo archivo de texto, escriba palabras Helloy guárdelo como UTF8. HelloToma 5 bytes, pero el tamaño del texto es de 8 bytes. (Este sigue siendo el caso en el sistema win7, el prefijo de codificación se ha eliminado de win10, por lo que el tamaño del archivo en win10 sigue siendo de 5 bytes. Parece que Microsoft mismo ha cambiado).

Utilizamos StreamWriterpara generar el archivo.

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

Algo extraño sucedió. StreamWriterLa codificación predeterminada es UTF8, que es la codificación UTF8. ¿Cómo puede ser diferente el tamaño del archivo?

UTF8EncodingHay dos atributos privados: emitUTF8Identifiery isThrowException, pasados ​​por el constructor durante la inicialización.

  • emitUTF8Identifier Si agregar un prefijo de codificación
  • isThrowException Indica si se informa un error cuando se encuentra un error de codificación

Esto muestra que se puede controlar si se agrega un prefijo de codificación.

EncodingSe UTF8definen a continuación, añadir código de prefijo.

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

El StreamWriterdefecto de codificación utilizado en emitUTF8Identifier=false:

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

Es por eso que los dos archivos en el código al principio no son del mismo tamaño.

Supongo que te gusta

Origin www.cnblogs.com/createwell/p/12731702.html
Recomendado
Clasificación