1

imap に接続し、本文情報を解析してデータベースに挿入するコードを作成しました。しかし、アクセントに問題があります。

メールのヘッダーから、次の情報を取得しました。

コンテンツ タイプ: テキスト/html; charset=ISO-8859-1

しかし、この情報を信用してよいかどうかはわかりません...

メールはポルトガル語で書かれていたので、アクセントのある単語がたくさんあります。たとえば、(ブラウザを使用して) メールのソース コードから次のフレーズを抽出します。

「...instalação de eletrônicos...」

そこで、imap に接続していくつかのメールを取得しました。

... typ, data = M.fetch(num, '(RFC822)') ...

コンテンツを印刷すると、次の単語が表示されます。

print data[0][1]
instala+º+úo de eletr+¦nicos

私は使用しようとしまし.decode('utf-8')たが、成功しませんでした。

instalação de eletrínicos

人間が読めるようにするにはどうすればよいですか?私のデータベースはutf-8です。

4

3 に答える 3

0

MartijnPietersに感謝します。電子メールには2つの異なるエンコードがあることがわかりました。私はこの部分を分割して個別に扱う必要がありました。

于 2013-02-12T02:14:03.933 に答える
0

ヘッダーには、「ISO-8859-1」文字セットを使用していると書かれています。したがって、そのエンコーディングで文字列をデコードする必要があります。

これを試して:

data[0][1].decode('iso-8859-1')
于 2013-02-11T18:23:43.997 に答える
0

ソースコードのエンコーディングを指定するとうまくいきました。以下のコード例の一番上にあるコードです。これは、python ファイルの先頭で定義する必要があります。

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

value = """...instalação de eletrônicos...""".decode("iso-8859-15")
print value
# prints: ...instalação de eletrônicos...

import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii','ignore')
print value
# prints: ...instalacao de eletronicos...

そして、例外なく str(value) も実行できるようになりました。

参照: http://docs.python.org/2/library/unicodedata.html

これはすべてのアクセントを保持しているようです:

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import unicodedata
value = """...instalação de eletrônicos...""".decode("iso-8859-15")
value = unicodedata.normalize('NFKC', value).encode('utf-8')
print value
print str(value)

# prints (without exceptions/errors):
# ...instalação de eletrônicos...
# ...instalação de eletrônicos...

編集:

最後のバージョンでは、結果が同じように見えても、等しい値が True にならないことに注意してください。例:

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import unicodedata
inValue = """...instalação de eletrônicos...""".decode("iso-8859-15")
normalizedValue = unicodedata.normalize('NFKC', inValue).encode('utf-8')

try:
    print inValue == normalizedValue
except UnicodeWarning:
    pass
# False

EDIT2:

これは同じものを返します:

normalizedValue = unicode("""...instalação de eletrônicos...""".decode("iso-8859-15")).encode('utf-8')
print normalizedValue 
print str(normalizedValue )

# prints (without exceptions/errors):
# ...instalação de eletrônicos...
# ...instalação de eletrônicos...

これが実際にutf-8でエンコードされたデータベースで有効かどうかはわかりませんが。おそらくそうではありませんか?

于 2013-02-11T20:13:45.680 に答える