Pregunta

La siguiente imagen lo explica todo:

texto alternativo http://img133.imageshack.us/img133/4206/accentar9 .png

La variable textInput proviene de File.ReadAllText (ruta); y caracteres como: '& # 233; & # 232; ... no se muestran. Cuando ejecuto mi prueba de unidad, todo está bien! Los veo ... ¿Por qué?

¿Fue útil?

Solución 3

No sé por qué funciona con NUnit, pero abro el archivo con NotePad ++ y veo ANSI en el formato. Ahora me convertí a UTF-8 y funciona.

Todavía me pregunto por qué funcionaba con NUnit y no en la consola. pero al menos funciona ahora.

Actualizar No entiendo por qué me voté en la pregunta y en esta respuesta porque la pregunta sigue siendo buena, ¿por qué en una consola no puedo leer un archivo ANSI pero en NUN puedo?

Otros consejos

Las clases .NET ( System.IO.StreamReader y los "me gusta") toman UTF-8 como la codificación predeterminada. Si desea leer una codificación diferente, debe pasarla explícitamente a la sobrecarga del constructor correspondiente.

También tenga en cuenta que no hay una sola codificación llamada & # 8220; ANSI & # 8221 ;. Probablemente se esté refiriendo a la página de códigos de Windows 1252 aka & # 8220; Western European & # 8221 ;. Tenga en cuenta que esto es diferente de la codificación predeterminada de Windows en otros países. Esto es relevante cuando intenta utilizar System.Text.Encoding.Default porque en realidad difiere de un sistema a otro.

/ EDIT: Parece que entendiste mal mi respuesta y mi comentario:

  1. El problema en su código es que necesita decirle a .NET qué codificación está usando.
  2. El otro comentario, diciendo que & # 8220; ANSI & # 8221; puede referirse a diferentes codificaciones, no tienen nada que ver con su problema. Fue solo un & # 8220; por cierto & # 8221; comentar para evitar malentendidos (bueno, ese resultado fue contraproducente).

Entonces, finalmente: la solución a su problema debería ser el siguiente código:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

La parte importante aquí es el uso de una instancia adecuada de System.Text.Encoding .

Sin embargo, esto supone que su codificación es de hecho Windows-1252 (pero creo que eso es lo que significa Notepad ++ por & # 8220; ANSI & # 8221;). No tengo idea de por qué su texto se muestra correctamente cuando lo lee NUnit. Supongo que NUnit tiene algún tipo de autodetección para las codificaciones de texto o que NUnit utiliza algunos valores predeterminados extraños (es decir, no UTF-8).

Ah, y por cierto: & # 8220; ANSI & # 8221; realmente se refiere al & # 8220; American National Standards Institute & # 8221 ;. Hay muchos estándares completamente diferentes que tienen & # 8220; ANSI & # 8221; como parte de sus nombres. Por ejemplo, C ++ es (entre otros) también un estándar ANSI.

Solo en algunos contextos se usa (de manera imprecisa) para referirse a las codificaciones de Windows. Pero incluso allí, como he intentado explicar, por lo general no se refiere a una codificación específica sino a una clase de codificaciones que Windows utiliza como valores predeterminados para diferentes países. Uno de estos es Windows-1252.

Intente configurar la página de código de salida de su consola con la chcp mando. Las páginas de códigos compatibles con Windows son aquí , here , y here . Recuerde, fundamentalmente la consola es bastante simple: muestra los caracteres UNCICODE o DBCS utilizando una página de códigos para determinar el glifo que se mostrará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top