【问题标题】:Replacing = with '\x' and then decoding in python将 = 替换为 '\x' 然后在 python 中解码
【发布时间】:2013-03-14 07:57:33
【问题描述】:

我使用 python 模块获取电子邮件的主题并收到字符串

'=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?=' 

我知道字符串是用 'utf-8' 编码的。 Python 有一个调用字符串的方法来解码这些字符串。但是要使用我需要将= 符号替换为\x 字符串的方法。通过手动交换然后打印解码后的结果字符串,我得到了字符串 سلام_کجائی 这正是我想要的。问题是如何自动进行交换?答案似乎比简单地在字符串上使用函数(如替换函数)更难。

下面我带来了我手动操作后使用的代码?

r='\xD8\xB3\xD9\x84\xD8\xA7\xD9\x85_\xDA\xA9\xD8\xAC\xD8\xA7\xD8\xA6\xDB\x8C'
print r.decode('utf-8')

我将不胜感激任何可行的想法。

【问题讨论】:

    标签: python utf-8 decode backslash


    【解决方案1】:

    只需从quoted-printable 解码得到utf8 编码的字节串:

    In [35]: s = '=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?='
    In [36]: s.decode('quoted-printable')
    Out[36]: '\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85_\xda\xa9\xd8\xac\xd8\xa7\xd8\xa6\xdb\x8c?'
    

    然后,如果需要,从 utf-8 到 unicode:

    In [37]: s.decode('quoted-printable').decode('utf8')
    Out[37]: u'\u0633\u0644\u0627\u0645_\u06a9\u062c\u0627\u0626\u06cc?'
    

     

    In [39]: print s.decode('quoted-printable')
    سلام_کجائی?
    

    【讨论】:

    • 呃,我没有意识到你可以直接这样做。
    • 我没有通过在我的系统中打印 s.decode('quoted-printable') 得到结果。只有打印 unicode 字符串才能得到想要的结果。
    【解决方案2】:

    这种编码称为quoted-printable。有一个用于执行编码和解码的 Python 模块。

    您说得对,它只是对二进制字符串的纯引用,因此您需要在之后应用 UTF-8 解码。 (当然,假设字符串是 UTF-8 格式的。但看起来是正确的,虽然我不懂语言。)

    import quopri
    
    print quopri.decodestring( "'=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?='" ).decode( "utf-8" )
    

    【讨论】:

    • svk 和 RichieHindle 的解决方案都能完美运行。虽然后者更方便。
    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多