【发布时间】:2016-12-20 07:54:24
【问题描述】:
我声明了 utf-8 编码,当我 print "wąż" 或其他不常见字符时,终端正确打印出“wąż”。
但是当我有一个带有字符串“wąż”的列表并打印整个列表时,我得到'w\xc4\x85\xc5\xbc'。
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
list1 = ['wąż']
但是当我打印整个列表时:
>>>print list1
['w\xc4\x85\xc5\xbc']
当我打印 list1[0] 或简单地打印字符串“wąż”时,它会正确打印:
>>>print list1[0]
>>>print "wąż"
wąż
wąż
一小时后……
好的,所以我尝试使用 [x.encode('utf-8') for x in list1] 将列表编码为 utf-8,但这给了我一个错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range (128).
所以我用下面的代码检查了我当前的编码,结果发现我有ascii。
import sys
reload(sys)
print sys.getdefaultencoding()
所以我将编码更改为utf-8,使用:sys.setdefaultencoding("utf-8"),它正确打印出我现在拥有utf-8。
所以我再次选择:
>>>[x.encode('utf-8') for x in list1]
>>>print list1
['w\xc4\x85\xc5\xbc']
但它什么也没改变。它仍然拒绝显示正确的字符。
【问题讨论】:
-
Unicode 字符串在 Python 2.x 中需要
u前缀:list1 = [u'wąż'] -
您的编码不是 UTF-8。试试
'mbcs'。 -
您已经知道答案了...
print list1[0]显示正确。 Python 2 的默认设置是显示列表中字符串的转义码……所以不要使用 Python 的默认设置打印列表。自己做(或切换到 Python 3,它改变了默认行为并做你想做的事)。
标签: python unicode encoding utf-8 character-encoding