【问题标题】:Python Decoding and Encoding, List Element utf-8Python 解码和编码,列表元素 utf-8
【发布时间】:2017-12-28 13:00:21
【问题描述】:

我认为只是另一个关于 python 编码的问题。我有这个程序:

regex = re.compile(ur'\b[sw]\w+', flags= re.U | re.I)
ergebnisliste = []
for line in fileobject:
  print str(line) 
  erg = regex.findall(line)
  ergebnisliste = ergebnisliste + erg
ergebnislistesortiert = sorted(ergebnisliste, key=lambda x: len(x))
print ergebnislistesortiert
fileobject.close()

我正在文本文件中搜索以 s 或 w 开头的单词。我的“ergebnislistesortiert”是排序结果列表。 我将打印结果列表,发现编码有问题:

['so', 'Wer', 'sp\xc3']

'sp\xc3' 应打印为 spät。这里有什么问题?为什么列表元素是utf-8?

我怎样才能得到正确的解码来打印“spät”?

非常感谢大家!

【问题讨论】:

    标签: python-2.7 utf-8 string-decoding


    【解决方案1】:

    \xc3 不是 UTF-8。它是U+00E4 的完整 UTF-8 编码的一个片段,但您可能正在使用 Latin-1 解码器之类的东西来阅读它(如果您在没有指定编码的情况下读取字节,这实际上是 Python 2 所做的),在这种情况下UTF-8 序列中的第二个字节与\w 不匹配。

    真正的解决方法是首先在将数据读入 Python 时对其进行解码。如果您正在编写新代码,切换到 Python 3 可能是最好和最简单的解决方法。

    如果您坚持使用 Python 2.7,那么与 Python 3 有点兼容的方法类似于

    import io
    fileobject = io.open(filename, encoding='utf-8')
    

    如果您可以控制输入文件并希望将正确的解决方案推迟到年长时,(请您的父母允许)将 UTF-8 输入文件转换为某些旧的 8 位编码。

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 2013-05-11
      • 2018-02-18
      • 2019-09-15
      • 2013-06-02
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2015-08-06
      相关资源
      最近更新 更多