当前位置: 首页 > 面试题库 >

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

常明亮
2023-03-14
问题内容

我有这样的 unicode

\xE5\xB1\xB1\xE4\xB8\x9C \xE6\x97\xA5\xE7\x85\xA7

我知道这是字符串代表bytes其进行编码utf-8

请注意,字符串\xE5\xB1\xB1\xE4\xB8\x9C \xE6\x97\xA5\xE7\x85\xA7本身是<type 'unicode'>

如何将其解码为真实字符串山东 日照


问题答案:

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

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

unicode_string.encode('latin1').decode('utf8')

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

修复此类错误的最佳方法是使用ftfy库,该库知道如何处理各种编解码器的强制解码的Mojibake文本。

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

>>> unicode_string = u'\xE5\xB1\xB1\xE4\xB8\x9C \xE6\x97\xA5\xE7\x85\xA7'
>>> print unicode_string.encode('latin1').decode('utf8')
山东 日照
>>> import ftfy
>>> print ftfy.fix_text(unicode_string)
山东 日照

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

>>> unicode_string = ur'\xE5\xB1\xB1\xE4\xB8\x9C \xE6\x97\xA5\xE7\x85\xA7'
>>> unicode_string
u'\\xE5\\xB1\\xB1\\xE4\\xB8\\x9C \\xE6\\x97\\xA5\\xE7\\x85\\xA7'
>>> print unicode_string.decode('string_escape').decode('utf8')
山东 日照

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



 类似资料:
  • 问题内容: 如何使用Android解码utf-8字符串?我尝试使用此命令,但输出与输入相同: 问题答案: 字符串不需要编码。它只是一个Unicode字符序列。 要将字符串转换为字节序列时需要进行 编码 。您选择的字符集(UTF-8,cp1255等)确定了Character-> Byte映射。请注意,字符不必转换为单个字节。在大多数字符集中,大多数Unicode字符都转换为至少两个字节。 字符串的编

  • 问题内容: 考虑: 如何在源代码中声明UTF-8字符串? 问题答案: 在源头中,你可以声明: 在PEP 0263中进行了描述: 然后,你可以在字符串中使用UTF-8: 在Python 3中不需要此声明,因为UTF-8是默认的源编码(请参阅PEP 3120)。 此外,值得验证你的文本编辑器是否已将代码正确编码为UTF-8。否则,你可能会有不被解释为UTF-8的不可见字符。

  • 问题内容: 我正在使用Javascript 函数解码base64编码的字符串(特别是来自GitHubAPI的base64编码的内容)。问题是我回来了ASCII编码的字符(而不是)。如何正确处理传入的以base64编码的流,以便将其解码为utf-8? 问题答案: 此问题: “ Unicode问题”由于s是16位编码的字符串,因此在大多数浏览器中,如果字符超出8位字节的范围(0x00〜0xFF),则调

  • 我正在使用Javascript函数来解码一个base64编码的字符串(特别是GitHub API中base64编码的内容)。问题是我得到了ASCII编码的字符(像而不是)。如何正确处理传入的base64编码的流,以便将其解码为UTF-8?

  • 问题内容: 我想获取给定UTF-8字符串的UCS-2代码点。例如,单词“ hello”应变为类似“ 0068 0065 006C 006C 006F”的名称。请注意,字符可以来自任何语言,包括诸如东亚语言之类的复杂文字。 因此,问题归结为“将给定字符转换为其UCS-2代码点” 但是如何?拜托,由于我非常着急,任何帮助都将不胜感激。 提问者的答覆转录为答案 感谢您的答复,但这需要在PHP v 4或5

  • 作为Python的新手,我已经花了很多时间。 我怎么能解码这样的URL: 到python 2.7中的这个: 返回的内容非常难看。 仍然没有解决办法,任何帮助都是感激的。