【发布时间】:2016-08-05 01:34:07
【问题描述】:
我有一本以 unicode 字符串作为键的字典。当我尝试访问该值时,我得到键错误,即使字典中键的打印输出和我的键相等:
>>> test = "Byggår"
>>> key = raw_dict.keys()[7]
>>> print(test)
Byggår
>>> print(key)
Byggår
>>> test
'Bygg\xc3\xa5r'
>>> key
u'Bygg\xe5r'
>>> raw_dict[test]
Traceback (most recent call last):
File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd_exec.py", line 3, in Exec
File "<input>", line 1, in <module>
KeyError: 'Bygg\xc3\xa5r'
似乎它们的编码方式有所不同。从实验来看,字典中的键似乎被编码为八进制字节(?)http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc3+xa5&mode=obytes,而我尝试访问该值的键被编码为十六进制(?)http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xe5&mode=hex。
字典中的键是从网络源获取的,所以我猜在路上有些东西搞砸了。
【问题讨论】:
-
您使用的是 Python 2,对吧?
-
@zmbq:是的,对不起。应该这么说。
-
八进制?那个是从哪里来的?哦,等等,您的参考站点具有误导性(通过遗漏)。
0xE5是 Windows Latin1 编码 (msdn.microsoft.com/en-us/library/cc195054.aspx) 的 a-ring 代码。
标签: python dictionary unicode utf-8 python-unicode