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

问题描述 投票:0回答:1

关于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','who','sp \ xc3']

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

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

非常感谢!

python-2.7 utf-8 string-decoding
1个回答
1
投票

\xc3不是UTF-8。它是U+00E4的完整UTF-8编码的一个片段,但是您可能正在使用类似于Latin-1解码器(如果您在不指定编码的情况下读取字节时Python 2的作用)读取它,在这种情况下,第二个\w不匹配UTF-8序列中的字节。

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

如果你坚持使用Python 2.7,那么类似Python 3的方法就像是

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

如果您可以控制输入文件并想要推迟正确的解决方案,直到您年纪大了,(请求您的父母允许)将UTF-8输入文件转换为一些传统的8位编码。

© www.soinside.com 2019 - 2024. All rights reserved.