如何修复Python中破坏的utf-8编码?

gia*_*dau 9 python unicode utf-8 character-encoding

我的字符串是Niệm Bồ Tát (Thiá»n sư Nhất Hạnh),我想解码它Ni?m B? Tát (Thi?n s? Nh?t H?nh).我看到该网站可以做到这一点http://www.enderminh.com/minh/utf8-to-unicode-converter.aspx

我开始尝试使用Python

mystr = '09. Bát Nhã Tâm Kinh'
mystr.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

但实际上它不正确,因为原始字符串是utf-8但字符串显示不是我期待的结果.

注意:它是越南字符.

如何解决这个案子?那是Windows Unicode还是什么?如何在这里检测编码.

Dim*_*ira 14

唯一帮助我破解西里尔字符串的东西 - https://github.com/LuminosoInsight/python-ftfy

该模块几乎可以修复所有内容,并且比在线解码器更好.

>>> from ftfy import fix_encoding
>>> mystr = '09. Bát Nhã Tâm Kinh'
>>> fix_encoding(mystr)
'09. Bát Nhã Tâm Kinh'
Run Code Online (Sandbox Code Playgroud)

它可以很容易地安装使用 pip install ftfy

  • 这个图书馆令人震惊。It Just Works™,比我的黑客技术更好、更快。感谢库的创建者,也感谢你,Dima,告诉我们这件事! (2认同)

Jon*_*let 11

我不确定你能用这些数据做些什么,但对于你在原帖中的例子,这有效:

>>> mystr = '09. Bát Nhã Tâm Kinh'
>>> s = mystr.decode('utf8').encode('latin1').decode('utf8')
>>> s
u'09. B\xe1t Nh\xe3 T\xe2m Kinh'
>>> print(s)
09. Bát Nhã Tâm Kinh
Run Code Online (Sandbox Code Playgroud)

  • 用于破坏此数据的编码很可能是cp1252,因此使用它而不是latin-1将允许您恢复更多(尽管不是全部)字符.Ni mB Tát(Thi nsưNhấtHạnh)vsNiệmBồTát(Thi nsưNhấtHạnh) (3认同)
  • 对于Python3,你只需要后一部分: `s = mystr.encode('latin1').decode('utf8)` (3认同)