我有一个列表:
print alist
['G\xc3\xbcnther', 'Santher']
并希望将其更改为:
['Günther', 'Santher']
我尝试过很多东西:
alist=[s.encode("utf-8") for s in alist]
print alist
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
在其他人中,Günther这个词迷失了,或者G \ xc3 \ xbcnther保持不变。我做错了什么?
答案 0 :(得分:2)
这里的一切正常,你只是从API中做错了。
打印字符串以外的对象,首先将其转换为字符串。在这种情况下,列表将转换为表示Python表达式的字符串,该字符串在输入时将评估为相等的列表。这是显示列表最有用的方法:您可以看到其中的确切内容,有时它只是被转义。
比较
>>> a = ['test\'test\"test', 0, '0']
>>> print a[0]
test'test"test
>>> print a
['test\'test"test', 0, '0']
字母ü
以UTF-8编码为两个字节:\xc3\xbc
。因此,如果您在UTF-8终端中打印字符串'G\xc3\xbcnther'
,您将看到Günther
。如果将它保存到一个文件并在一个体面的文本编辑器中打开该文件,它将显示Günther
(也许你必须稍微戳一下编码设置)。出于所有意图和目的,这是将“Günther”一词存储在字节串中的最佳方式。
如果您想以一种不错的方式打印列表,您可以自行格式化。例如,如果它是一个字符串列表,就像你的例子中一样,join
会很好用:
>>> print '; '.join(['G\xc3\xbcnther', 'Santher'])
Günther; Santher
(顺便说一下:你不能对字节串进行编码,它已经编码了。但是你可以解码它。)
答案 1 :(得分:1)
您的代码会显示代表性表单,以便在字符串形式中使用此代码:
print alist[0]
python将unicode字符保存为相同,无法更改此内容:)