3

私はvobjectPythonで使用しています。私はvcardここにあるものを解析しようとしています:

http://www.mayerbrown.com/people/vCard.aspx?Attorney=1150

これを行うために、私は次のことを行います。

    import urllib
    import vobject

    vcard = urllib.urlopen("http://www.mayerbrown.com/people/vCard.aspx?Attorney=1150").read()
    vcard_object = vobject.readOne(vcard)

これを行うと、次のエラーが発生します。

Traceback (most recent call last):
  File "<pyshell#86>", line 1, in <module>
    vobject.readOne(urllib.urlopen("http://www.mayerbrown.com/people/vCard.aspx?Attorney=1150").read())
  File "C:\Python27\lib\site-packages\vobject-0.8.1c-py2.7.egg\vobject\base.py", line 1078, in readOne
    ignoreUnreadable, allowQP).next()
  File "C:\Python27\lib\site-packages\vobject-0.8.1c-py2.7.egg\vobject\base.py", line 1031, in readComponents
    vline = textLineToContentLine(line, n)
  File "C:\Python27\lib\site-packages\vobject-0.8.1c-py2.7.egg\vobject\base.py", line 888, in textLineToContentLine
    return ContentLine(*parseLine(text, n), **{'encoded':True, 'lineNumber' : n})
  File "C:\Python27\lib\site-packages\vobject-0.8.1c-py2.7.egg\vobject\base.py", line 262, in __init__
    self.value = str(self.value).decode('quoted-printable')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 29: ordinal not in range(128)

vcardに変換したりunicode、さまざまなエンコーディングを使用したりするなど、これについて他の多くのバリエーションを試しました。しかし、私はいつも同じ、または非常によく似たエラーメッセージを受け取ります。

これを修正する方法について何かアイデアはありますか?

4

3 に答える 3

2

ADRプロパティが「quoted-printable」エンコーディングでエンコードされていると誤ってマークされているため、vCardの13行目で失敗しています。ü文字はとしてエンコードする必要があります。その=FCためvobject、エラーがスローされます。

于 2012-12-28T14:10:49.647 に答える
0

ファイルはUTF-8(私は思う)でエンコードされた文字列としてダウンロードされますが、ライブラリはそれをASCIIとして解釈しようとします。

urlopenの後に次の行を追加してみてください。

vcard = vcard.decode('utf-8')
于 2012-12-28T10:22:16.577 に答える
0

vobjectライブラリreadOneメソッドはかなり厄介です。

問題を回避するために、vcardをquoted-printableデータの形式でデータベースに保持することにしました。

some_vcardUTF-8エンコーディングの文字列を想定

quopried_vcard = quopri.encodestring(some_vcard)

そして、quopried_vcardが持続し、必要な場合は次のようになります。

vobj = vobject.readOne(quopried_vcard)

次に、デコードされたデータを取得します。たとえばfn、vcardのフィールドの場合:

quopri.decodestring(vobj.fn.value)

たぶん誰かがreadOneでUTF-8をうまく処理できるでしょう。はいの場合、私はそれを見たいです。

于 2015-04-09T15:48:52.403 に答える