CP437 控制字符解码是否损坏?

2024-01-13

根据代码页 437 的维基百科页面 https://en.wikipedia.org/wiki/Code_page_437字节值\x01通过\x1f应该解码为图形字符,例如b'\x01'等于 ☺'\u263A'。但那不是decode产生:

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

Python 3.6 就是这样,但 2.7 对于所有 31 字节值也做了同样的事情。


虽然有与字节范围相关的图形\x01通过\x1f,这些图形仅在某些情况下使用。在其他上下文中,这些代码点将被解释为控制字符,如 ASCII 中那样。引用一个IBM CP437 页面 http://www-01.ibm.com/software/globalization/cp/cp00437.html:

代码点 X'01' 到 X'1F' 和 X'7F' 可以是控件或图形,具体取决于上下文。显示内存映射中的十六进制代码 视频显示缓冲区是一个图形。对于打印机,图形上下文是由数据流中的前面的控制序列建立的。那里有两个 这样的控制序列:ESC X'5C'和ESC X'5E'分别命名为“打印所有字符”和“打印单个字符”。其他情况下的代码 有问题的点用作对照。

Python的CP437解码是基于Unicode.org 上的 Unicode 映射 ftp://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT,它使用控制字符解释。

The Unicode 常见问题解答意味着 http://unicode.org/faq/char_combmark.html#5“CP437 和其他 DOS 类型代码页的特殊图形字符(01-1F、7F)的正确 Unicode 映射”应位于https://www.unicode.org/Public/MAPPINGS https://www.unicode.org/Public/MAPPINGS,但是向下挖掘只会发现与控制字符的映射,以及page http://www.unicode.org/Public/MAPPINGS/VENDORS/IBM/IBM_conversions.html链接到多个 IBM 网站。挖掘 IBM 网站发现ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt,它给出了图形映射\x01-\x1f就 IBM 而言GCID系统 https://www-01.ibm.com/software/globalization/gcgid/gcgid.html,但不是按照 Unicode 的方式。

我不知道是否真的有is来自 IBM 或 Unicode 的官方映射,它提供了规范的 Unicode 映射\x01-\x1f就CP437的图形解释而言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CP437 控制字符解码是否损坏? 的相关文章

随机推荐