2011-06-20 152 views
2

ウェブページ内に電子メールを表示しようとしています。このプログラムはPythonで書かれています。残念ながら、いくつかの文字エンコーディングの問題があります。私はテキストに引用符と二重引用符をつけています。文字列のPython特殊文字

オリジナルメール:

“All is good” 
‘it is getting better’ 

文字セット '窓-1252' と私はISPから取得:

=93All is good=94 
=91it is getting better=92 

文字セット 'UTF-8' と私はISPから取得:

=E2=80=9CAll is good=E2=80=9D 
=E2=80=98it is getting better=E2=80=99 

=..を対応する16進数の文字に置き換えます。 Unicode関数へ

以降の呼び出しが

UnicodeEncodeError: 'charmap' codec can't encode character u'\u201d' in position 6: 
character maps to <undefined> 

または類似で失敗

character set 'windows-1252' 
ôAll is goodö 
æit is getting betterÆ 


character set 'utf-8' 
ΓÇ£All is goodΓÇ¥ 
ΓÇÿit is getting betterΓÇÖ 
:テキストは、その後のように見えます。

コールはunicode(message, 'utf-8', 'replace')のようになります。 私が間違っていることは何ですか?

+0

適切次回は、また、あなたのコードを編集しているとき、私はどんなミスをしたかどうかを確認するために見てください、あなたのコードをフォーマットしてください。ありがとうございました! – Trufa

答えて

3

なぜ何かで置き換えていますか?

>>> m = email.message_from_string('''Content-Type: text/plain; utf-8\nContent-Transfer-Encoding: quoted-printable\n\n=E2=80=9CAll is good=E2=80=9D\n=E2=80=98it is getting better=E2=80=99''') 
>>> m.get_payload(decode=True).decode(m['Content-Type'].split('; ')[1])u'\u201cAll is good\u201d\n\u2018it is getting better\u2019' 
0

私はこれを試していたので、問題に遭遇しました。

出力は次のようになります:ここでもう一つの試みはある

# lines is already prefilled with a valid HTML message 
m = email.message_from_string(lines); 
email.iterators._structure(m); 
print m.is_multipart(); 
print m.get_payload(decode=True); 
print m.get_payload(); 

出力は次のようになります。

> > > execfileを( 'email2.py')
マルチパート/代替
   

[0x0235FDF0 >、0x02355F08 >で< email.message.Messageインスタンスで< email.message.Messageインスタンス] 10     text/plainの
         テキスト/ HTML

なし

decode='true'を使用すると表示されません。ここでは単純化されたメールです:

Content-Type: multipart/alternative; 
    boundary="----=_NextPart_000_0130_01CC1E30.41026040" 

This is a multi-part message in MIME format. 

------=_NextPart_000_0130_01CC1E30.41026040 
Content-Type: text/plain; 
    charset="utf-8" 
Content-Transfer-Encoding: quoted-printable 

plain 

------=_NextPart_000_0130_01CC1E30.41026040 
Content-Type: text/html; 
    charset="utf-8" 
Content-Transfer-Encoding: quoted-printable 

html 

------=_NextPart_000_0130_01CC1E30.41026040--