将=替换为'\x';然后用python解码

将=替换为'\x';然后用python解码,python,utf-8,decode,backslash,Python,Utf 8,Decode,Backslash,我使用python模块获取了一封电子邮件的主题,并收到了字符串 '=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?=' 我知道字符串是用“utf-8”编码的。Python有一个调用字符串的方法来解码这些字符串。但要使用该方法,我需要将=符号替换为\x字符串。通过手动交换,然后打印解码后的字符串,我得到的字符串正是我想要的。问题是我如何能自动进行交换?答案似乎比简单地在字符串上使用函数(如replace function)更难 下

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

'=D8=B3=D9=84=D8=A7=D9=85_=DA=A9=D8=AC=D8=A7=D8=A6=DB=8C?=' 
我知道字符串是用“utf-8”编码的。Python有一个调用字符串的方法来解码这些字符串。但要使用该方法,我需要将
=
符号替换为
\x
字符串。通过手动交换,然后打印解码后的字符串,我得到的字符串正是我想要的。问题是我如何能自动进行交换?答案似乎比简单地在字符串上使用函数(如replace function)更难

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

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解码。(当然,假设字符串是UTF-8格式的。但这看起来是正确的,尽管我不懂这种语言。)


只需从引用的printable对其进行解码,即可获得由TestRing编码的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?'


嗯,我没有意识到你可以直接这么做。我只是在我的系统中打印s.decode('quote-printable')并没有得到结果。只有打印unicode字符串才能得到想要的结果。svk和RichieHindle的解决方案都能完美地工作。虽然后者更方便。
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')
سلام_کجائی?