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 Hello
y guárdelo como UTF8. Hello
Toma 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 StreamWriter
para 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ó. StreamWriter
La codificación predeterminada es UTF8, que es la codificación UTF8. ¿Cómo puede ser diferente el tamaño del archivo?
UTF8Encoding
Hay dos atributos privados: emitUTF8Identifier
y isThrowException
, pasados por el constructor durante la inicialización.
emitUTF8Identifier
Si agregar un prefijo de codificaciónisThrowException
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.
Encoding
Se UTF8
definen a continuación, añadir código de prefijo.
public static Encoding UTF8 {
get {
if (utf8Encoding == null) utf8Encoding = new UTF8Encoding(true);
return utf8Encoding;
}
}
El StreamWriter
defecto 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.