7

Pythonモジュールを使用してメールメッセージの件名を取得し、文字列を受信しました

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

文字列が「utf-8」でエンコードされていることはわかっています。Pythonには、そのような文字列をデコードするために文字列に対して呼び出されるメソッドがあります。しかし、この方法を使用するには、=記号を\x文字列に置き換える必要がありました。手動で交換し、デコードされた結果の文字列を印刷することで、まさに私が望む文字列سلام_کجائیを取得します。問題は、どうすれば自動的に交換を行うことができるかということです。答えは、replace関数のような文字列での関数の単純な使用よりも難しいようです。

以下に、手動操作後に使用したコードを持ってきましたか?

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

実行可能なアイデアをいただければ幸いです。

4

2 に答える 2

8

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')
سلام_کجائی?
于 2013-03-24T22:12:30.310 に答える
4

この種のエンコーディングは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" )
于 2013-03-24T22:11:51.827 に答える