Frage

Hier ist das Problem:

In C# erhalte ich Informationen aus einer älteren ACCESS-Datenbank..NET konvertiert den Inhalt der Datenbank (im Fall dieses Problems einen String) in Unicode, bevor er mir den Inhalt übergibt.

Wie konvertiere ich diese Unicode-Zeichenfolge zurück in ihr ASCII-Äquivalent?


Bearbeiten
Unicode char 710 ist in der Tat ein MODIFIER BUCHSTABE CIRCUMFLEX ACCENT.Hier ist das Problem etwas genauer:

 -> (Extended) ASCII character ê (Extended ASCII 136) was inserted in the database.
 -> Either Access or the reading component in .NET converted this to U+02C6 U+0065
    (MODIFIER LETTER CIRCUMFLEX ACCENT + LATIN SMALL LETTER E)
 -> I need the (Extended) ASCII character 136 back.


Folgendes habe ich versucht (ich verstehe jetzt, warum das nicht funktioniert hat ...):

string myInput = Convert.ToString(Convert.ToChar(710));
byte[] asBytes = Encoding.ASCII.GetBytes(myInput);

Dies ergibt aber nicht 94, sondern ein Byte mit dem Wert 63...
Hier ist ein neuer Versuch, aber es funktioniert immer noch nicht:

byte[] bytes = Encoding.ASCII.GetBytes("ê");


Lösung
Danke an beide csgero Und bzlm Für den Hinweis in die richtige Richtung habe ich das Problem gelöst Hier.

War es hilfreich?

Lösung

Okay, lassen Sie uns erarbeiten. Sowohl csgero und < a href = "https://stackoverflow.com/questions/138449/how-to-convert-a-unicode-character-to-its-extended-ascii-equivalent#138583"> wies bzlm in der rechten Richtung.

Aufgrund der blzm Antwort sah ich die Windows-1252-Seite auf dem Wiki und fand, dass es einen Zeichensatz genannt wird. Wikipedia-Artikel für Codepage , die die folgenden angegeben:

  

Keine formale Standard existiert für diese ‚ erweiterte Zeichensätze ‘; IBM bezeichnete lediglich die Varianten als Codeseiten, wie es immer für Varianten von EBCDIC Codierungen getan hatte.

Das führte mich zu 437 Codepage:

  

n ASCII-kompatibele Codeseiten, erhielten die unteren 128 Zeichen ihre Standard-US-ASCII-Werte und unterschiedliche Seiten (oder Sätze von Zeichen) können in den oberen 128 Zeichen zur Verfügung gestellt werden. DOS-Computer für den nordamerikanischen Markt, zum Beispiel gebaut, verwendet Codepage 437 , die akzentuieren enthalten Zeichen für Französisch benötigt, Deutsch und ein paar andere europäische Sprachen, sowie einige grafische Strichzeichnung Zeichen.

So, Codepage 437 war die Codepage I ‚erweitert ASCII‘ rief, es hatte die ê als Zeichen 136 so sah ich einige andere Zeichen, wie gut und sie scheinen recht.

csgero mit dem Encoding.GetEncoding () Hinweis kam, habe ich es die folgende Anweisung zu erstellen, die mein Problem löst:

byte[] bytes = Encoding.GetEncoding(437).GetBytes("ê");

Andere Tipps

Sie können nicht die Standard-ASCII-Kodierung (Encoding.ASCII) verwenden hier, sondern muss die Codierung mit der entsprechenden Codepage mit Encoding.GetEncoding (...) erstellen. Sie könnten versuchen, Codepage 1252 zu verwenden, die eine Obermenge von ISO 8859-1.

ASCII definiert ê nicht;Die Zahl 136 stammt von der Zahl für den Zirkumflex in 8-Bit-Kodierungen wie Windows-1252.

Können Sie überprüfen, ob in diesem Fall tatsächlich ein kleines e mit einem Zirkumflex (ê) in der Access-Datenbank gespeichert werden soll?Möglicherweise ist U+02C6 U+0065 das Ergebnis eines Konvertierungsfehlers, bei dem die Eingabe tatsächlich ein e ist gefolgt von ein Zirkumflex oder etwas ganz anderes.Möglicherweise enthält Ihre Access-Datenbank beschädigte Daten in dem Sinne, dass die angegebene Codierung nicht mit dem Inhalt übereinstimmt. In diesem Fall analysiert der .NET-Client die Daten möglicherweise falsch (mit dem falschen Decoder).

Wenn dieser Fehler tatsächlich beim Lesen aus der Datenbank auftritt, kann das Einfügen von Code oder Konfigurationseinstellungen möglicherweise hilfreich sein.

In Codepage 437, Zeichennummer 136 ist ein e mit einem Zirkumflex.

Hmm ... Ich bin nicht sicher, welches Zeichen Sie meinen. Das Caret ( „^“, Zirkumflex) den gleichen Code in ASCII und Unicode (U + 005E).

/ EDIT: Verdammt, meine Schuld. 710 (U + 02C6) ist eigentlich der Modifikator LETTER Zirkumflex. Leider ist dieses Zeichen nicht Teil an allen ASCII. Es mag wie die normalen caret aussehen, aber es ist ein anderes Zeichen. Einfache Umwandlung wird hier nicht helfen. Ich bin mir nicht sicher, ob .NET-Mapping von ähnlichen Zeichen unterstützt, wenn sie von Unicode zu konvertieren. Eine Untersuchung wert, though.

Der Wert 63 ist das Fragezeichen, ALIAS „Ich bin nicht in der Lage, dieses Zeichen im ASCII anzuzeigen“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top