Python 解码和编码,列表元素 utf-8

Python Decoding and Encoding, List Element utf-8

我认为 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"?

非常感谢你们!

\xc3 不是 UTF-8。它是 U+00E4 的完整 UTF-8 编码的片段,但您可能正在使用 Latin-1 解码器之类的东西读取它(如果您读取字节而不指定编码),在这种情况下,UTF-8 序列中的第二个字节与 \w.

不匹配

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

如果你坚持使用 Python 2.7,有点 Python 3 兼容的方法是

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

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