【问题标题】:Python convert utf-8 back to stringPython 将 utf-8 转换回字符串
【发布时间】:2019-03-20 22:14:07
【问题描述】:

我有一个看起来像

的字符串
a = 'Verm\xc3\xb6gensverzeichnis'

当我执行 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?然后只需打印 a.lower()。您已经有了 UTF-8 编码的数据,\x... 转义序列只是字符串对象的 representation 的一部分。它们使您可以更轻松地使用具有非 ASCII 值的 Python 字符串调试代码。
  • 我不确定a.lower() 与此有什么关系。字符串是不可变的,所以a.lower() 返回一个新的字符串对象。也许您忘记将输出分配给另一个变量,或返回a
  • 感谢您的回答。问题是我想计算每个字母的出现,而不是打印它们并显示结果。这就是为什么我确实需要程序而不是打印功能的正确结果。你能帮帮我吗?
  • 主要问题:Python 2 还是 Python 3?
  • @ShaLi:然后 decode 从 UTF-8 字节到 Unicode 字符串,然后计算 Unicode 代码点。 (还有read up on Unicode versus bytes 所以你明白你为什么要这样做)。

标签: python unicode utf-8


【解决方案1】:

这必须是 Python 2。如果您想计算字符数和编码字节数,请使用 Unicode。 \xc3\xb6ö 的编码字节:

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

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

>>> u = a.decode('utf8')
>>> u
u'Verm\xf6gensverzeichnis'
>>> 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 规范化graphemes

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2011-05-17
    相关资源
    最近更新 更多