Ich habe folgendes Testprogramm
%Vor%Dies erzeugt folgendes Ergebnis:
%Vor% Wie ich hier sehen kann, funktioniert GetBytes korrekt
167 in Unicode = & gt; 21 in CP437
aber GetString funktioniert nicht
21 in CP437 = & gt; 21 in Unicode
Ist das ein Fehler oder mein Fehler?
CP437 ist nicht "bidirektional" für Zeichen im Bereich 0-31. Wie auf der Wikipedia-Seite angegeben, haben Sie verlinkt:
Für viele Anwendungen werden die Codes im Bereich von 0 bis 31 und der Code 127 verwendet erzeuge diese Symbole nicht. Einige (oder alle) von ihnen werden interpretiert als ASCII-Steuerzeichen.
Das Zuordnen eines Unicode-Zeichens zu einem unterstützten CP437-Zeichen in diesem Bereich funktioniert, aber nicht umgekehrt. Nehmen wir zum Beispiel Zeichen, die durch die Bytes 13 und 10 dargestellt werden: Wenn Sie sie innerhalb einer CP437-Zeichenfolge haben, möchten Sie wahrscheinlich, dass Wagenrücklauf- und Zeilenvorschubzeichen erhalten bleiben und nicht in ein Aufzählungszeichen und eine Musiknotiz konvertiert werden. Dieses Verhalten ist normal: Es ist kein Fehler.
.net unterstützt zwei verschiedene Zeichen, die beide (normalerweise) als §
:
Zeichen 21 ist ein spezielles Steuerzeichen, das bei Ausgabe im Textmodus als §
dargestellt wird.
CP437 ermöglicht, dass 21 entweder als Steuerzeichen oder als Literal §
interpretiert wird. Anscheinend interpretiert GetString
es als Steuerzeichen (was eine vollkommen gültige Option ist) und ordnet es daher dem Unicode-Steuerzeichen 21 und nicht dem Unicode-Literal §
zu.
Tags und Links .net c# character-encoding .net-3.5