2010-09-06 26 views
5

Tengo que crear algún tipo de archivo de texto en el que haya números y letras hebreas decodificadas en ASCII.Cómo convertir hebreo (unicode) a Ascii en C#?

Este es el método de creación de archivos que desencadena en ButtonClick

protected void ToFile(object sender, EventArgs e) 
{ 
    filename = Transactions.generateDateYMDHMS(); 
    string path = string.Format("{0}{1}.001", Server.MapPath("~/transactions/"), filename); 
    StreamWriter sw = new StreamWriter(path, false, Encoding.ASCII); 
    sw.WriteLine("hello"); 
    sw.WriteLine(Transactions.convertUTF8ASCII("שלום")); 
    sw.WriteLine("bye"); 
    sw.Close(); 
} 

como se puede ver, yo uso Transactions.convertUTF8ASCII método estático() para convertir de cadena Unicode, probablemente desde .NET a la representación ASCII de la misma. Lo uso en el término hebreo 'shalom' y vuelvo '????' en lugar de resultado, lo necesito.

Aquí está el método.

public static string convertUTF8ASCII(string initialString) 
{ 
    byte[] unicodeBytes = Encoding.Unicode.GetBytes(initialString); 
    byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes); 
    return Encoding.ASCII.GetString(asciiBytes); 
} 

En lugar de tener la palabra inicial decodificada a ASCII me sale '????' En el archivo que creo, incluso si ejecuto Debbuger obtengo el mismo resultado.

¿Qué estoy haciendo mal?

+0

Hola, Entonces, ¿cómo lo has resuelto? Tengo el mismo problema. Necesito convertir el hebreo Unicode (1400, 1500, etc.) en códigos ASCII. –

Respuesta

2

No se puede simplemente traducir caracteres unicode arbitrarios a ASCII. Lo mejor que puede hacer es descartar los caracteres no compatibles, por lo tanto, ????. Obviamente, los caracteres básicos de 7 bits funcionarán, pero no mucho más. Tengo curiosidad sobre cuál es el resultado esperado?

Si necesita esto para transferencia (en lugar de representación) puede considerar la codificación de base-64 de los bytes UTF8 subyacentes.

+0

Gracias, Marc. Tengo 'Œ € <‰' este tipo de caracteres en el archivo de ejemplo, aunque no representa 'shalom' pero se hará una idea de qué tipo de codificación es. No pude entender a qué te refieres con 'transferencia' a base-64. – eugeneK

+0

@eugeneK - todavía no es obvio para mí cuál es la traducción. Sospecho que necesitaría ver la secuencia de bytes exacta y los puntos de código de los personajes que se deben asignar entre ellos para que "haga clic". –

+0

tengo un requisito de error que me llevó a ASCII en primer lugar. Gracias por la información de todos modos. – eugeneK

2

¿Quizás te refieres a ANSI, no a ASCII?

ASCII no define ningún carácter hebreo. Sin embargo, hay algunas páginas de códigos ANSI que practican tales como "ventanas-1255"

En este caso, es posible que desee considerar la búsqueda de: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

En resumen, donde se tiene:

Encoding.ASCII 

se podría reemplazarlo con:

Encoding.GetEncoding(1255) 
+0

usted probablemente correcto. no tengo experiencia con Codificación, por lo tanto, nunca supe ASCII no contiene caracteres hebreos – eugeneK

+0

@eugueK ASCII es más o menos el alfabeto inglés, 0-9, puntuación básica y algunos caracteres de control. Ref: http://en.wikipedia.org/wiki/ASCII – userx

+0

nopes, tengo un requisito de error que me llevó a ASCII en primer lugar. Gracias por la información de todos modos. – eugeneK

1

¿Está quizá preguntando por transliteration (como en "Romanization") i en lugar de la conversión de codificación, si realmente está hablando de ASCII?

+0

nopes, tengo un requisito de error que me llevó a ASCII en primer lugar. Gracias por la información de todos modos. – eugeneK

1

Acabo de enfrentar el mismo problema cuando el archivo xml original estaba en codificación ASCII.

Como USERX sugirió

Encoding.GetEncoding (1255)

XDocument.Parse(System.IO.File.ReadAllText(xmlPath, Encoding.GetEncoding(1255))); 

Así que ahora mi archivo XDocument puede leer hebreo, incluso si el archivo XML se guarda como ASCII

Cuestiones relacionadas