在Python中使用扩展ASCII码

2 投票
1 回答
17014 浏览
提问于 2025-04-17 08:09

我用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 替代 chrchr 这个函数生成的是一个包含单个字节的字符串,而 unichr 生成的是一个包含单个 Unicode 字符的字符串。最后,查找的时候也要用 Unicode 字符,比如 d[u'é'],因为 d['é'] 会查找 é 的 UTF-8 编码。

你的代码里有三种东西:一种是 latin-1 编码的字符串,一种是 utf-8 编码的字符串,还有一种是 Unicode 字符串。要搞清楚你在任何时候用的是什么,需要对 Python 的工作原理有很多了解,还要对 Unicode 和编码有一定的认识。

关于编码和 Unicode 的讨论,没有提到 Joel Spolsky 的文章就不算完整:每个软件开发者绝对必须了解的 Unicode 和字符集的基本知识(没有借口!)

撰写回答