编码字符不适用于列表?

2024-05-23 18:44:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个清单:

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保持不变。我做错什么了?你知道吗


Tags: inforasciicanutfcodecencodeprint
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(可能您需要稍微戳一下编码设置)。无论出于何种目的,这都是在bytestring中存储单词“Günther”的最佳方法。你知道吗

如果你想以一种好的方式打印一个列表,你可以自己格式化它。例如,如果它是一个字符串列表,比如在您的示例中,join会很好地工作:

>>> print '; '.join(['G\xc3\xbcnther', 'Santher'])
Günther; Santher

(顺便说一下:你不能对bytestring进行编码,它已经被编码了。不过,您可以对其进行解码。)

您的代码显示一个表示形式以查看在字符串形式中使用以下内容:

print alist[0]

python将unicode字符保存为相同的,无法更改:)

相关问题 更多 >