Python列表项编码

时间:2016-04-18 15:44:13

标签: python list unicode encoding

为什么在迭代列表中的项目时,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

为什么编码会改变(是吗?我怎样才能更改列表中的编码

1 个答案:

答案 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']