【问题标题】:Python3, how to encode this string correctly?Python3,如何正确编码这个字符串?
【发布时间】:2019-02-06 23:21:23
【问题描述】:

免责声明,我已经做了很长时间的研究来单独解决这个问题,但我在这里发现的大多数问题都与 Python 2.7 相关,或者不能解决我的问题

假设我有以下内容(该示例来自 BeautifulSoup 文档,我正在尝试解决一个更大的问题):

>>> markup = "<h1>Sacr\xc3\xa9 bleu!</h1>"
>>> print(markup)
'Sacré bleu!'

对我来说,标记应该分配给一个字节,所以我可以这样做:

>>> markup = b"<h1>Sacr\xc3\xa9 bleu!</h1>"
>>> print(str(markup, 'utf-8'))
<h1>Sacré bleu!</h1>

是的!但是我该如何在 "&lt;h1&gt;Sacr\xc3\xa9 bleu!&lt;/h1&gt;" 之间进行转换,这是错误的 b"&lt;h1&gt;Sacr\xc3\xa9 bleu!&lt;/h1&gt;"

因为如果我这样做:

>>> markup = b"<h1>Sacr\xc3\xa9 bleu!</h1>"
>>> bytes(markup, "utf-8")
b'<h1>Sacr\xc3\x83\xc2\xa9 bleu!</h1>'

你看到了吗?它免费插入\x83\xc2

>>> print(bytes(markup))
TypeError: string argument without an encoding

【问题讨论】:

    标签: python-3.x utf-8 python-3.5


    【解决方案1】:

    如果您有 Unicode 字符串 "&lt;h1&gt;Sacr\xc3\xa9 bleu!&lt;/h1&gt;",则说明已经出现问题。要么你的输入被破坏了,要么你在处理它时做错了什么。例如,在这里,您已将 Python 2 示例复制到 Python 3 解释器中。

    如果您的琴弦损坏是因为您做错了得到它,那么您应该真正修复您做错的任何事情。如果您无论如何都需要将"&lt;h1&gt;Sacr\xc3\xa9 bleu!&lt;/h1&gt;" 转换为b"&lt;h1&gt;Sacr\xc3\xa9 bleu!&lt;/h1&gt;",则将其编码为latin-1:

    bytestring = broken_unicode.encode('latin1')
    

    【讨论】:

    • 确实,我知道它已经坏了,我遇到了 BeautifulSoup 的这个问题,我试图通过隔离问题来保持问题清晰,谢谢你的回答
    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多