2010-09-06 12 views
5

Ich muss eine Art Textdatei erstellen, in der Zahlen und hebräische Buchstaben in ASCII dekodiert werden.Wie hebräisch (Unicode) zu Ascii in C# konvertieren?

Dies ist der Dateierstellung Methode, die auf Button löst

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

wie Sie sehen können, verwende ich Transactions.convertUTF8ASCII() statische Methode von wahrscheinlich Unicode-String von .NET zu ASCII-Darstellung zu konvertieren. Ich benutze es auf Hebräisch 'Shalom' und komme wieder '????' anstelle von Ergebnis brauche ich.

Hier ist die Methode.

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

Anstatt das ursprüngliche Wort nach ASCII dekodiert zu bekommen, bekomme ich '????' in der Datei, die ich selbst wenn ich Debboger laufen lasse, bekomme ich dasselbe Ergebnis.

Was mache ich falsch?

+0

Hallo gespeichert wurde, Wie hast du es gelöst? Ich habe das gleiche Problem.Notwendig, hebräische Unicode (1400, 1500 usw.) zu ASCII-Codes zu konvertieren. –

Antwort

2

Sie können nicht einfach beliebige Unicode-Zeichen in ASCII umwandeln. Das Beste, was es tun kann, ist das Verwerfen der nicht unterstützbaren Zeichen, daher ????. Offensichtlich funktionieren die grundlegenden 7-Bit-Zeichen, aber nicht viel mehr. Ich bin gespannt, was das erwartete Ergebnis ist?

Wenn Sie dies für Übertragung (anstelle der Darstellung) benötigen, könnten Sie die Basis-64-Codierung der zugrunde liegenden UTF8 Bytes berücksichtigen.

+0

Danke, Marc. Ich habe '<' diese Art von Zeichen in Beispieldatei, obwohl es nicht 'shalom' darstellt, aber Sie werden eine Idee bekommen, welche Art von Codierung es ist. Ich konnte nicht verstehen, was Sie mit "Transfer" zu Base-64 meinen. – eugeneK

+0

@eugeneK - es ist mir immer noch nicht klar, was die Übersetzung ist. Ich vermute, dass ich die genaue Byte-Sequenz und die Zeichencodepunkte sehen müsste, die einander zuordnen sollen, damit sie "klickt". –

+0

Ich habe Anforderung mit Fehler, die mich auf ASCII an erster Stelle führen. Danke für die Info sowieso. – eugeneK

2

Wollen Sie vielleicht ANSI, nicht ASCII?

ASCII definiert keine hebräischen Zeichen. Es gibt jedoch einige ANSI-Code-Seiten, die so tun, als "Windows-1255"

In diesem Fall möchten Sie vielleicht an betrachten suchen: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

Kurz gesagt, wo Sie haben:

Encoding.ASCII 

Sie würden ersetzen Sie es mit:

Encoding.GetEncoding(1255) 
+0

hast du wahrscheinlich recht. Ich habe keine Erfahrung mit Codierung überhaupt, daher wusste ich nie ASCII enthält keine hebräischen Zeichen – eugeneK

+0

@ eugueK ASCII ist ziemlich genau das englische Alphabet, 0-9, grundlegende Interpunktion und einige Steuerzeichen. Ref: http://en.wikipedia.org/wiki/ASCII – userx

+0

Nopes, ich habe Anforderung mit Fehler, die mich auf ASCII an erster Stelle führen. Danke für die Info sowieso. – eugeneK

1

Sind Sie vielleicht über transliteration (wie in "Romanization") zu fragen i statt Kodierung Konvertierung, wenn Sie wirklich über ASCII sprechen?

+0

nopes, ich habe Anforderung mit Fehler, die mich auf ASCII an erster Stelle führen. Danke für die Info sowieso. – eugeneK

1

Ich sah gerade das gleiche Problem, wenn Original-XML-Datei in ASCII-Codierung war.

Als UserX vorgeschlagen

Encoding.GetEncoding (1255)

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

So, jetzt können meine XDocument Datei hebräisch auch lesen, wenn die XML-Datei als ASCII