根据Wikipedia page for Code Page 437,字节值\x01
到\x1f
应解码为图形字符,例如b'\x01'
等同于'\u263A'
。但那不是decode
产生的:
>>> b'\x01'.decode('cp437')
'\x01'
对于所有31个字节的值,这是Python 3.6但2.7也是如此。
答案 0 :(得分:4)
虽然存在与字节范围\x01
到\x1f
相关联的图形,但这些图形仅在某些上下文中使用。在其他情况下,这些代码点将被解释为控制字符,如ASCII中所示。引用IBM page on CP437:
代码点X'01'到X'1F'和X'7F'可以是取决于上下文的控件或图形。用于在内存映射中显示十六进制代码 视频显示缓冲区是一个图形。对于打印机,图形上下文由数据流中的前一控制序列建立。那里有两个 这样的控制序列:ESC X'5C'和ESC X'5E'分别命名为Print All Characters和Print Single Character。在其他情况下的代码 有问题的点被用作对照。
Python的CP437解码基于Unicode mappings on Unicode.org,它使用控制字符解释。
Unicode FAQ implies“CP437和其他DOS类型代码页的特殊图形字符(01-1F,7F)的正确Unicode映射”应该在https://www.unicode.org/Public/MAPPINGS处可用,但需要深入研究只有控制字符出现映射,并且page链接到几个IBM网站。通过IBM的网站进行挖掘ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt,它提供了\x01
- \x1f
在IBM GCGID system方面的图形映射,但不包括Unicode。
我不知道是否是来自IBM还是Unicode的官方映射,它为\x01
- \x1f
提供了规范的Unicode映射。 CP437的图形解释。
答案 1 :(得分:0)
我设法在此找到该文件:
https://unicode.org/Public/MAPPINGS/VENDORS/MISC/IBMGRAPH.TXT
它包括Unicode字符(0x01-0x1f)到IBM CP437以及IBM CP864(阿拉伯语)的映射。