UTF8 es el valor predeterminado real y solo se usa cuando la detección automática no encuentra ninguna codificación. Entonces, la lista de materiales es más importante. Ver detalles más abajo:
ReadAllText(string path)
- MSDN: "Este método intenta detectar automáticamente la codificación"
ReadAllText(string path, Encoding encoding)
- MSDN: "Este método intenta detectar automáticamente la codificación"
Desde herramienta de reflector: ReadAllText(path)
es lo mismo que ReadAllText(path, Encoding.UTF8)
, porque ReadAllText(path)
solo llama al ReadAllText(path, Encoding.UTF8)
. Ambos métodos crean StreamReader de esta manera:
public StreamReader(string path, Encoding encoding) : this(path, encoding, true, 0x400)
{
}
Esto significa que se crea StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize)
con detectEncodingFromByteOrderMarks establecidas en true. Esto significa que si la Marca de Orden de Byte (BOM) está presente usará la codificación de la lista de materiales, si la lista de materiales no está presente, utilizará la codificación proporcionada. Si la lista de materiales no está presente y no se proporciona la codificación, usará UTF8. Entonces, el UTF8 es el valor predeterminado real en este caso, pero recuerde que la lista de materiales es más importante que la codificación sugerida.
// bom.txt is the file with BOM present. nobom.txt - witout BOM
File.ReadAllText("bom.txt"); // use BOM
File.ReadAllText("bom.txt", Encoding.UTF8); // use BOM
File.ReadAllText("bom.txt", Encoding.Default); // use BOM
File.ReadAllText("nobom.txt"); // use UTF-8
File.ReadAllText("nobom.txt", Encoding.UTF8); // use UTF-8
File.ReadAllText("nobom.txt", Encoding.Default); // use system's ANSI codepage
Tenga en cuenta que Encoding.Default no debe considerarse como la codificación "por defecto" - es la codificación (no Unicode!) Para el sistema por defecto de la página de códigos * *. –