Python 将 utf-8 转换回字符串



我有一个字符串,看起来像

a = 'Vermxc3xb6gensverzeichnis'

当我做print(a(时,它向我显示了正确的结果,即Vermögensverzeichnis。

print(a)
Vermögensverzeichnis

我想做的是使用 Counter(( 计算每个字母的出现次数并将它们保存在数据帧中。当我使用 Counter(a( 时,它给了我这样的结果:

Counter({'V': 1,
'c': 1,
'e': 4,
'g': 1,
'h': 1,
'i': 2,
'm': 1,
'n': 2,
'r': 2,
's': 2,
'v': 1,
'z': 1,
'xb6': 1,
'xc3': 1})

你能帮我摆脱像\xc3\xb6这样的代码吗?我已经尝试了许多现有的答案,不幸的是它们不起作用。

提前非常感谢!

这必须是 Python 2。 如果要计算字符数与编码字节数,请使用 Unicode。xc3xb6ö的编码字节:

>>> a = 'Vermxc3xb6gensverzeichnis'
>>> print a # Note this only works if your terminal is configured for UTF-8 encoding.
Vermögensverzeichnis

解码为 Unicode。 只要您的终端配置正确,它仍然应该正确打印:

>>> u = a.decode('utf8')
>>> u
u'Vermxf6gensverzeichnis'
>>> print u
Vermögensverzeichnis

计算 Unicode 码位:

>>> from collections import Counter
>>> Counter(u)
Counter({u'e': 4, u'i': 2, u'n': 2, u's': 2, u'r': 2, u'c': 1, u'v': 1, u'g': 1, u'h': 1, u'V': 1, u'm': 1, u'xf6': 1, u'z': 1})

u'xf6'ö的 Unicode 代码点。 打印键和值以在终端上正确显示它们:

>>> for k,v in Counter(u).iteritems():
...     print k,v
...     
c 1
v 1
e 4
g 1
i 2
h 1
V 1
m 1
n 2
s 2
r 2
ö 1
z 1

未来的研究,看看这将在哪里打破:Unicode规范化字素

最新更新