2017-10-25 4 views
3

Gemäß der Wikipedia page for Code Page 437 sollten die Byte-Werte \x01 bis \x1f zu Grafikzeichen dekodiert werden, z. b'\x01' entspricht ☺ '\u263A'. Aber das ist nicht das, was decode produziert:Ist die CP437-Decodierung für Steuerzeichen unterbrochen?

>>> b'\x01'.decode('cp437') 
'\x01' 

Das war Python 3.6 aber 2.7 macht das gleiche für alle 31-Byte-Werte.

+2

Die von unicode zur Verfügung gestellte Übersetzungstabelle scheint nicht mit wikipedia übereinzustimmen: ftp://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT – tkausl

Antwort

4

Während dem Bytebereich \x01 bis \x1f Grafiken zugeordnet waren, wurden diese Grafiken nur in einigen Kontexten verwendet. In anderen Kontexten würden diese Codepunkte als Steuerzeichen wie in ASCII interpretiert. Die Code-Punkte X'01 'bis X'1F' und X'7F 'können je nach Kontext Steuerelemente oder Grafiken sein. Bei Anzeigen ist der hexadezimale Code in einem speicherabgebildeten Videoanzeigepuffer eine Grafik. Bei Druckern wird der Grafikkontext durch eine vorhergehende Steuersequenz im Datenstrom festgelegt. Es gibt zwei solche Steuersequenzen: ESC X'5C 'und ESC X'5E' mit dem Namen Alle Zeichen drucken und jeweils ein einzelnes Zeichen drucken. In anderen Situationen werden die Codes Punkte als Kontrollen verwendet.

Pythons CP437-Decodierung basiert auf Unicode mappings on Unicode.org, die die Steuerzeicheninterpretation verwenden.

The Unicode FAQ implies, dass „Die richtigen Unicode-Zuordnungen für die speziellen grafischen Zeichen (01-1F, 7F) von CP437 und andere DOS-Typ Codepages“ bei https://www.unicode.org/Public/MAPPINGS verfügbar sein sollte, aber da unten graben dreht sich nur um die Zuordnungen nach oben mit die Steuerzeichen und eine page Verknüpfung mit mehreren IBM Websites. Das Durchforsten der Websites von IBM zeigt ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt auf, was grafische Zuordnungen für \x01 - \x1f im Hinblick auf IBMs GCGID system ergibt, aber nicht in Bezug auf Unicode.

Ich weiß nicht, ob es tatsächlich ist eine offizielle Mapping, entweder IBM oder Unicode, die für \x01 kanonische Unicode-Zuordnungen gibt - \x1f in Bezug auf die grafische Interpretation der CP437.

+0

Das ist, was ich dachte, fand keine Referenz aber trotzdem. Windows-Codepages sind seltsam .. – tkausl

+0

Fantastische Referenz, danke. Gibt es eine Möglichkeit, diese Grafikzeichen anders als eine eigene Konvertierungstabelle zu erstellen? –

+0

@MarkRansom: Die nächste, die ich gefunden habe, ist [IBM Tabelle] (ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt), die CP437-Zuordnungen in Bezug auf IBM GCGID gibt System, aber nicht in Bezug auf Unicode. – user2357112

Verwandte Themen