在Python中使用扩展ASCII码
我用Python创建了一个字典,但在处理扩展ASCII码时遇到了问题。
创建字典的循环是这样的:(ASCII码从128到164:比如é、à等)
#extented ascii codes
i = 128
while i <= 165 :
dictionnary[chr(i)] = 'extended ascii'
i = i + 1
但是当我尝试使用这个字典时:
>>> dictionnary['è']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '\xc3\xa8'
我的Python脚本头部有# -- coding: utf-8 --。
我试过使用编码、解码等方法,但结果总是不对。
为了弄清楚发生了什么,我尝试了:
>>> ord('é')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found
还有
>>> ord(u'é')
233
我对ord(u'é')感到困惑,因为在扩展ASCII表中,'é'是130,而不是233。
我明白扩展ASCII码包含“两个字符”,但我不明白如何解决字典的问题?
提前谢谢你!
1 个回答
4
用 unichr
替代 chr
。chr
这个函数生成的是一个包含单个字节的字符串,而 unichr
生成的是一个包含单个 Unicode 字符的字符串。最后,查找的时候也要用 Unicode 字符,比如 d[u'é']
,因为 d['é']
会查找 é 的 UTF-8 编码。
你的代码里有三种东西:一种是 latin-1 编码的字符串,一种是 utf-8 编码的字符串,还有一种是 Unicode 字符串。要搞清楚你在任何时候用的是什么,需要对 Python 的工作原理有很多了解,还要对 Unicode 和编码有一定的认识。
关于编码和 Unicode 的讨论,没有提到 Joel Spolsky 的文章就不算完整:每个软件开发者绝对必须了解的 Unicode 和字符集的基本知识(没有借口!)