0

我认为关于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”?

非常感谢你们!

4

1 回答 1

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 位编码。

于 2017-12-28T13:32:11.467 回答