Pregunta

Tengo un problema con la conversión de un archivo de texto de ANSI a UTF8 en C #. Trato de mostrar los resultados en un navegador.

Así que tengo un archivo de este texto con muchos caracteres acento en ella. Su codificados en ANSI, así que tengo que convertirlo a UTF-8 porque en el navegador en lugar de las que aparecen accentchars "?". No importa cómo me trató de convertir a UTF8 todavía era un "?". Pero si puedo convertir el archivo de texto en Notepad ++ a utf8 entonces los caracteres de acento son buenos desplayed.

aquí es una paz de código de codificación que hice:

    public string Encode(string text)
    {
        // encode the string as an ASCII byte array
        byte[] myASCIIBytes = ASCIIEncoding.ASCII.GetBytes(text);

        // convert the ASCII byte array to a UTF-8 byte array
        byte[] myUTF8Bytes = ASCIIEncoding.Convert(ASCIIEncoding.ASCII, UTF8Encoding.UTF8, myASCIIBytes);

        // reconstitute a string from the UTF-8 byte array 
        return UTF8Encoding.UTF8.GetString(myUTF8Bytes);
    }

¿Tiene usted alguna idea de por qué está sucediendo esto?

¿Fue útil?

Solución

¿Tiene usted alguna idea de por qué está sucediendo esto?

Sí, usted es demasiado tarde. Es necesario especificar ANSI cuando se lee la cadena de archivo. En la memoria siempre es Unicode (UTF16).

Otros consejos

Al convertir a ASCII pierden de forma inmediata todos los caracteres no ingleses (incluyendo aquellos con acento), porque tiene sólo 127 ASCII (7 bits) de caracteres.

Se hace extraño manipulación. string en .NET está en UTF-16, por lo que una vez que regrese string, no byte[] esto no importa.

Creo que debe hacer: (supongo que por ANSI media Latin1)

public byte[] Encode(string text)
{
    return Encoding.GetEncoding(1252).GetBytes(text);
}

Dado que la cuestión no era muy claro que hay una observación razonable que en realidad puede ser que necesite la siguiente:

public string Decode(byte[] data)
{
    return Encoding.GetEncoding(1252).GetString(data);
}

Esta es probablemente la manera más fácil:

byte[] ansiBytes = File.ReadAllBytes("inputfilename.txt");
var utf8String = Encoding.Default.GetString(ansiBytes);
File.WriteAllText("outputfilename.txt", utf8String);

Yo recomendaría leer este http://www.joelonsoftware.com/articles/Unicode .html .
Si usted va a leer un archivo ASCII que necesita saber la página de códigos del archivo.

Esta es, probablemente, pasando porque su string text originales ya contiene caracteres no válidos. Codificación de conversión sólo tiene sentido si su entrada es una matriz de bytes. Por lo tanto, debe leer el archivo como matriz de bytes en lugar de cadena, o, como dijo Henk, especifique la codificación para leer el archivo.

Mi pensamiento aquí es cuando se guarda el archivo en Notepad ++ se inserta el de orden de bytes-Mark por lo que el navegador puede inferir que se trata de UTF-8 a partir de esto. De lo contrario, lo que probablemente tiene que indicar explícitamente al navegador la codificación de caracteres, como en el DTD, XML, etc.

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