c# - unidades - encoding:: utf8
C#Ayuda a leer caracteres extranjeros usando StreamReader (8)
Estoy usando el siguiente código para leer un archivo de texto que contiene caracteres extraños, el archivo está codificado ANSI y se ve bien en el bloc de notas. El código a continuación no funciona, cuando los valores del archivo se leen y se muestran en la cuadrícula de datos, los caracteres aparecen como cuadrados.
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))
Gracias
Actualización 1 : He intentado todas las codificaciones encontradas en System.Text.Encoding
. y todos fallan en mostrar el archivo correctamente.
Actualización 2 : Cambié la codificación del archivo (volví a guardar el archivo) a unicode y utilicé System.Text.Encoding.Unicode
y funcionó bien. Entonces, ¿por qué el bloc de notas lo leyó correctamente? ¿Y por qué System.Text.Encoding.Unicode
no leyó el archivo ANSI?
El uso de Encoding.Unicode no decodificará con precisión un archivo ANSI de la misma manera que un decodificador JPEG no entenderá un archivo GIF.
Me sorprende que Encoding.Default
no funcionara para el archivo ANSI si realmente era ANSI. Si alguna vez descubre exactamente qué página de códigos estaba usando el Bloc de notas, podría usar Encoding.GetEncoding(int)
.
En general, cuando sea posible, recomendaría usar UTF-8.
File.OpenText () siempre usa un StreamReader UTF-8 implícitamente. Cree su propia instancia de StreamReader en su lugar y especifique la codificación deseada. me gusta
using (StreamReader reader = new StreamReader(@"C:/test.txt", Encoding.Default)
{
// ...
}
Intente una codificación diferente, como Encoding.UTF8. También puedes intentar que StreamReader encuentre la propia codificación:
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)
Editar: Acabo de ver su actualización. Intenta dejar que StreamReader haga las conjeturas.
Resolví mi problema de leer caracteres portugueses, cambiando el archivo fuente en notepad ++.
DO#
var url = System.Web.HttpContext.Current.Server.MapPath(@"~/Content/data.json");
string s = string.Empty;
using (System.IO.StreamReader sr = new System.IO.StreamReader(url, System.Text.Encoding.UTF8,true))
{
s = sr.ReadToEnd();
}
Sí, podría ser con la codificación real del archivo, probablemente unicode. Pruebe UTF-8 ya que es la forma más común de codificación Unicode. De lo contrario, si el archivo ASCII entonces la codificación ASCII estándar debería funcionar.
También puede probar la codificación predeterminada, que utiliza la página de códigos ANSI del sistema actual.
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
Cuando intente utilizar el menú "Guardar como" del Bloc de notas con el archivo original, observe el cuadro combinado de codificación. Le indicará qué bloc de notas codificado adivinado es utilizado por el archivo.
Además, si se trata de un archivo ANSI, el parámetro detectEncodingFromByteOrderMarks probablemente no ayude mucho.
Tuve el mismo problema y mi solución era simple: en lugar de
Encoding.ASCII
utilizar
Encoding.GetEncoding("iso-8859-1")
La respuesta fue encontrada here .
Edición: más soluciones. Esta quizás más precisa:
Encoding.GetEncoding(1252);
Además, en algunos casos esto también funcionará si la codificación predeterminada de su sistema operativo coincide con la codificación del archivo:
Encoding.Default;
para el árabe, usé Encoding.GetEncoding(1256)
. esta funcionando bien