如何使用python解码代表utf-8的字符串?

如何使用python解码代表utf-8的字符串?,第1张

如何使用python解码代表utf-8的字符串?

如果您打印了字符串的

repr()
输出,
unipre
那么您似乎有一个
Mojibake
,使用错误的编码对字节数据进行了解码。

首先编码回字节,然后使用正确的编解码器解码。这可能像编码Latin-1一样简单:

unipre_string.enpre('latin1').depre('utf8')

但是,这取决于如何应用错误的解码。如果使用Windows代码页(如CP1252),则无论如何强制对CP1252范围之外的UTF-8字节进行编码,最终可能会得到实际上无法编码回CP1252的Unipre数据。

修复此类错误的最佳方法是使用

ftfy
库,该库知道如何处理各种编解码器的强制解码的Mojibake文本。

对于您的小样本,Latin-1 似乎 可以正常工作:

>>> unipre_string = u'xE5xB1xB1xE4xB8x9C xE6x97xA5xE7x85xA7'>>> print unipre_string.enpre('latin1').depre('utf8')山东 日照>>> import ftfy>>> print ftfy.fix_text(unipre_string)山东 日照

如果您有 文字
字符

x
后跟两位数字,那么您将拥有另一层编码层,其中字节被4个字符替换。您必须先要求Python使用
string_escape
编解码器解释转义,然后才能将其“解码”为实际字节:

>>> unipre_string = ur'xE5xB1xB1xE4xB8x9C xE6x97xA5xE7x85xA7'>>> unipre_stringu'\xE5\xB1\xB1\xE4\xB8\x9C \xE6\x97\xA5\xE7\x85\xA7'>>> print unipre_string.depre('string_escape').depre('utf8')山东 日照

'string_escape'
是一个Python 2唯一的编解码器,它产生一个字节串,因此以后将其解码为UTF-8是安全的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5649594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存