2010-09-06 17 views
5

Devo creare una sorta di file di testo in cui ci sono numeri e lettere ebraiche decodificate in ASCII.Come convertire in ebraico (unicode) in Ascii in C#?

Questo è il metodo di creazione del file che fa scattare il 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(); 
} 

come potete vedere, io uso Transactions.convertUTF8ASCII() metodo statico convertire da stringhe Unicode probabilmente da .NET a rappresentazione ASCII di esso. Lo uso sul termine ebraico 'shalom' e torno '????' invece di risultato ho bisogno.

Ecco il metodo.

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); 
} 

Invece di avere la parola iniziale decodificati ASCII ottengo '????' nel file che creo anche se eseguo debbuger ottengo lo stesso risultato.

Cosa sto facendo male?

+0

Ciao, Quindi, come lo hai risolto? Ho lo stesso problema. È necessario convertire unicode ebraico (1400, 1500 ecc.) In codici ASCII. –

risposta

2

Non è possibile tradurre semplicemente caratteri unicode arbitrari in ASCII. Il meglio che può fare è eliminare i caratteri non supportati, quindi ????. Ovviamente i personaggi di base a 7 bit funzioneranno, ma non molto altro. Sono curioso di sapere quale sia il risultato previsto?

Se è necessario per il trasferimento (anziché la rappresentazione) è possibile considerare la codifica in base 64 dei byte UTF8 sottostanti.

+0

Grazie, Marc. Ho 'Œ € <‰' questo tipo di caratteri nel file di esempio, sebbene non rappresenti 'shalom' ma avrai un'idea di che tipo di codifica sia. Non riuscivo a capire cosa intendi con 'trasferimento' su base-64. – eugeneK

+0

@eugeneK - non mi è ancora chiaro quale sia la traduzione. Ho il sospetto che dovrei vedere la sequenza esatta di byte e i punti di codice del carattere che dovrebbero mapparsi l'un l'altro perché "clic". –

+0

ho un obbligo con errore che mi porta ad ASCII al primo posto. Grazie comunque per le informazioni. – eugeneK

2

Forse intendete ANSI, non ASCII?

ASCII non definisce alcun carattere ebraico. Ci sono tuttavia alcune pagine di codice ANSI che fanno come "windows-1255"

In questo caso, si può prendere in considerazione guardando: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

In breve, dove si ha:

Encoding.ASCII 

si potrebbe sostituirlo con:

Encoding.GetEncoding(1255) 
+0

probabilmente hai ragione. Non ho alcuna esperienza con la codifica, quindi non ho mai saputo che ASCII non contiene caratteri ebraici – eugeneK

+0

@eugueK ASCII è praticamente solo l'alfabeto inglese, 0-9, punteggiatura di base e alcuni caratteri di controllo. Rif: http://en.wikipedia.org/wiki/ASCII – userx

+0

nopes, ho un requisito con errore che mi porta ad ASCII al primo posto. Grazie comunque per le informazioni. – eugeneK

1

Sei forse chiedendo transliteration (come in "Romanization") i Invece di conversione di codifica, se stai davvero parlando di ASCII?

+0

nopes, ho bisogno di un errore che mi ha portato ad ASCII al primo posto. Grazie comunque per le informazioni. – eugeneK

1

Ho appena affrontato lo stesso problema quando il file xml originale era in ASCII Encoding.

Come Userx suggerito

Encoding.GetEncoding (1255)

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

Così ora il mio file XDocument può leggere l'ebraico, anche se il file XML è stato salvato come ASCII

Problemi correlati