2011-12-11 102 views
2

我用Python创建了一个字典,但是我遇到了扩展Ascii代码的问题。在Python中使用扩展的Ascii代码

是外币的dictionnary的循环是:(ASCII数128至164:E,A等)

#extented ascii codes 
i = 128 
while i <= 165 : 
    dictionnary[chr(i)] = 'extended ascii' 
    i = i + 1 

但是当我尝试使用dictionnary:

>>> dictionnary['è'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: '\xc3\xa8' 

我有# - - 编码:utf-8 - - 在python脚本的头文件中。 我试过编码,解码等,但结果总是不好。

要了解发生了什么,我已经试过:

>>> 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'é')相混淆,因为 'E' 是延长数130 ascii表,而不是233.

据我所知,扩展ascii代码包含“两个字符”,但我不明白如何解决与dictionnary的问题?

在此先感谢! :-)

+2

有“扩展ASCII”没有这样的事。有很多编码(Windows中的cpXXXX,latinXX,iso-8859-XX和现实世界中的其他编码),其中247可以表示不同的东西。 – glglgl

+0

扩展Ascii是128范围内的字符。 Ascii = 0-127,扩展Ascii = 128-255。这可以追溯到60年代和70年代。现在它不是重要的,除了它的残留效果,比如你不能打印超过128的字符,但你可以少于128.日期返回到哑终端。 –

回答

3

使用unichr而不是chr。函数chr产生包含单个字节的字符串,而unichr产生包含单个Unicode字符的字符串。最后,使用unicode字符进行查找:d[u'é'],因为d['é']将查找é的utf-8编码。

你的代码中有3件事:一个拉丁-1编码的str,一个utf-8编码的str和一个unicode字符串。在任何时候清楚地了解您在任何时候都掌握的知识,需要掌握大量有关Python如何工作以及对Unicode和编码的正确理解的知识。

有关编码和Unicode没有答案是不完整的链接乔尔斯波斯基的文章对此事:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+1

你是不是故意说“没有答案关于编码和Unicode是*完整的没有链接...”? –

+0

谢谢Fred,固定! – 2011-12-11 16:37:16

+0

感谢您的回复。我已经安装了python3,它完美的工作:-) – lilawood