UTF-8 字符串作为字典中的键导致 KeyError
UTF-8 string as key in dictionary causes KeyError
我有一本以 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, whilst the key I try to access the value with is encoded as hex(?) http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xe5&mode=hex .
字典中的键是从网络资源中获取的,所以我猜在途中有些东西搞砸了。
您的 test
是一个字符串,而 key
是一个 unicode 字符串。看到前面的u
了吗?
您应该使用 Python 3,其中所有字符串都是 unicode 字符串,或者确保在字典中查找之前将 test 转换为 unicode。
我有一本以 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, whilst the key I try to access the value with is encoded as hex(?) http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xe5&mode=hex .
字典中的键是从网络资源中获取的,所以我猜在途中有些东西搞砸了。
您的 test
是一个字符串,而 key
是一个 unicode 字符串。看到前面的u
了吗?
您应该使用 Python 3,其中所有字符串都是 unicode 字符串,或者确保在字典中查找之前将 test 转换为 unicode。