Python 理清编码问题 : 从 ASCII 到 GB 系列
巴别塔 人类联合起来建设通往天堂的高塔,上帝为阻止人类的计划,让人类说不同的语言,使人类相互不能沟通,计划因此失败,人类至此各散东西。
英语——ASCII码
>>> print([ord(c) for c in 'abAB'])
[97, 98, 65, 66]
其他字母语言——扩展ASCII码
b = bytes([0x82]) #0x82 == 130
codes = ['cp273','cp857','cp866']
print([b.decode(code) for code in codes])
汉字——GB系列编码
GB2312 国标,双字节表示,1981年,6763个汉字 GBK 国标扩展,双字节,扩充、兼容GB2312,1995年,21003汉字 GB18030 GBK扩充,单、双、四字节,27484字,兼容GB2312,GBK BIG5 台湾地区繁体中文字符集,双字节,1984年,13053汉字
c='巩'
codes=['gb2312','gbk','gb18030']
print([c.encode(code) for code in codes])
[b'\xb9\xae', b'\xb9\xae', b'\xb9\xae']
。可见,汉字巩在这三个编码中,都被编码为双字节0xb9ae了,这是因为GB系列是兼容的。>>> c.encode('big5')
Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'big5' codec can not encode character '\u5de9' in position 0: illegal multibyte sequence
总结
从ASCII的简单,但不支持其他国家文字。 到扩展ASCII支持其他国文字,但产生乱码。 再到MBCS多字节编码可以支持汉语这种很多字符的语言,但由于太多语言编码导致各自为战互不兼容。
作者:巩庆奎,大奎,对计算机、电子信息工程感兴趣。gongqingkui at 126.com
赞 赏 作 者
更多阅读
特别推荐
点击下方阅读原文加入社区会员
评论