Encoding.GetEncoding (437) .GetString () Fehler?

8

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?

    
SeeR 08.08.2011, 15:05
quelle

2 Antworten

7

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.

    
Julien Lebosquain 08.08.2011, 16:06
quelle
0

.net unterstützt zwei verschiedene Zeichen, die beide (normalerweise) als § :

dargestellt werden %Vor%

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.

    
Heinzi 08.08.2011 16:08
quelle