2010-12-04 61 views
9

Tengo una lectura de texto de un archivo XML almacenado en codificación UTF8. C# lo lee perfectamente, lo consulté con el depurador, pero cuando intento convertirlo a ASCII para guardarlo en otro archivo, ¿me sale un? char en lugares donde había un personaje conflictivo. Por ejemplo, este texto:Conversión de UTF8 a ASCII

string s = "La introducción masiva de las nuevas tecnologías de la información"; 

se guardará como

"La introducci?n masiva de las nuevas tecnolog?as de la informaci?n" 

No puedo reemplazarlos por su latino (a, e, i, o, u) las vocales porque algunas palabras en español haría Echa de menos el sentido. Ya he intentado this y this preguntas sin éxito. Así que espero que alguien pueda ayudarme. ¡La respuesta seleccionada en el segundo ni siquiera compiló ...!

En caso de que alguien quiere echar un vistazo, mi código es éste:

private void WriteInput(string input) 
{ 
    byte[] byteArray = Encoding.UTF8.GetBytes(input); 
    byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray); 
    string finalString = Encoding.ASCII.GetString(asciiArray); 

    string inputFile = _idFile + ".in"; 
    var batchWriter = new StreamWriter(inputFile, false, Encoding.ASCII); 
    batchWriter.Write(finalString); 
    batchWriter.Close(); 
} 

Respuesta

25

Esos caracteres no tienen asignación en ASCII. Revise una tabla ASCII, como Wikipedia's, para verificar esto. Puede que le interese la codificación de Windows 1252, o "ASCII extendido", como a veces se le llama, que tiene puntos de código para muchos caracteres acentuados, incluido el español.

var input = "La introducción masiva de las nuevas tecnologías de la información"; 
var utf8bytes = Encoding.UTF8.GetBytes(input); 
var win1252Bytes = Encoding.Convert(
       Encoding.UTF8, Encoding.GetEncoding("windows-1252"), utf8bytes); 
File.WriteAllBytes(@"foo.txt", win1252Bytes); 
+0

Probado con este, pero cambia ó por o, á por a. etc ... –

+0

@David: funciona perfectamente para mí, usando el caso de prueba anterior. Asegúrese de no tener una codificación ASCII (Encoding.ASCII) pegada en su código en alguna parte. –

+0

¡Perdón por eso! probado de nuevo y funciona como un encanto ... Ahora sé por qué tienes 18.3K rep !!! ;) –

7

no se puede hacer. ASCII no tiene esas letras, así que lo mejor que puede hacer es codificar URL o codificar escape unicode.

+0

¿Cómo es que? Si ASCII no tiene esas letras, ¿cómo puedo cambiar la codificación de UTF8 a ASCII usando Notepad ++ y funciona como un amuleto? –

+5

Porque Notepad ++ realmente no usa ASCII. Está usando algo como CP1250, que * does * tiene esas letras. –

+0

Muy bien, me consiguieron allí ... –

Cuestiones relacionadas