为什么在迭代列表中的项目时,Python 2.7中的编码会发生变化?
test_list = ['Hafst\xc3\xa4tter', 'asbds@ages.at']
打印清单:
print(test_list)
告诉我这个输出:
['Hafst\xc3\xa4tter', 'asbds@ages.at']
到目前为止,这么好。但是为什么,当我遍历列表时,例如:
for item in test_list:
print(item)
我得到了这个输出:
Hafstätter
asbds@ages.at
为什么编码会改变(是吗?我怎样才能更改列表中的编码?
答案 0 :(得分:1)
编码没有改变,它们只是显示字符串的不同方式。一个显示非ASCII字节作为调试的转义码:
>>> test_list = ['Hafst\xc3\xa4tter', 'asbds@ages.at']
>>> print(test_list)
['Hafst\xc3\xa4tter', 'asbds@ages.at']
>>> for item in test_list:
... print(item)
...
Hafstätter
asbds@ages.at
但它们是等价的:
>>> 'Hafst\xc3\xa4tter' == 'Hafstätter'
True
如果要查看使用非调试输出显示的列表,则必须自己生成:
>>> print("['"+"', '".join(item for item in test_list) + "']")
['Hafstätter', 'asbds@ages.at']
调试输出有一个原因:
>>> a = 'a\xcc\x88'
>>> b = '\xc3\xa4'
>>> a
'a\xcc\x88'
>>> print a,b # should look the same, if not it is the browser's fault :)
ä ä
>>> a==b
False
>>> [a,b] # In a list you can see the difference by default.
['a\xcc\x88', '\xc3\xa4']