【问题标题】:Encoding Characters not working on a list?编码字符在列表上不起作用?
【发布时间】:2014-12-06 15:31:03
【问题描述】:

我有一个类似的列表:

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

【问题讨论】:

    标签: python list utf-8 character-encoding


    【解决方案1】:

    这里一切正常,您只是从 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
    

    (顺便说一句:你不能编码一个字节串,它已经编码了。但是你可以解码它。)

    【讨论】:

      【解决方案2】:

      您的代码显示了一个表示形式,以查看 字符串形式 使用这个:

      print alist[0]
      

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

      【讨论】:

      • 所以我不能更改列表?真的吗?
      • 这个没问题,风格属于python。
      • 是否有可能从该列表中的“\xc3\xbc”中创建一个“ü”?某种解决方法?从该列表中创建一个字符串?
      • 我对此一无所知。耐心等待另一个答案,但因为我知道没有办法改变这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多