首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python、vobject、编码、vcards

python、vobject、编码、vcards
EN

Stack Overflow用户
提问于 2012-12-28 17:47:05
回答 3查看 1.8K关注 0票数 3

我在python中使用vobject。我正在尝试解析位于以下位置的vcard

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

为此,我执行以下操作:

代码语言:javascript
复制
    import urllib
    import vobject

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

每当我这样做时,我都会得到以下错误:

代码语言:javascript
复制
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,使用各种编码等,但我总是得到相同或非常相似的错误消息。

有什么办法解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-28 22:10:50

在vCard的第13行失败,因为ADR属性被错误地标记为以"quoted-printable“编码。ü字符应该编码为=FC,这就是vobject抛出错误的原因。

票数 2
EN

Stack Overflow用户

发布于 2012-12-28 18:22:17

文件被下载为UTF-8 (我认为)编码的字符串,但库试图将其解释为ASCII。

尝试在urlopen之后添加以下行:

代码语言:javascript
复制
vcard = vcard.decode('utf-8')
票数 0
EN

Stack Overflow用户

发布于 2015-04-09 23:48:52

vobject库的readOne方法相当笨拙。

为了避免出现问题,我决定将vcards以可引用的可打印数据的形式保存在数据库中,这是用户喜欢的。

quopried_vcard = quopri.encodestring(some_vcard)

vobj = vobject.readOne(quopried_vcard)

quopri.decodestring(vobj.fn.value)

也许有人可以用readOne更好地处理UTF-8。如果是的话,我很想看看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14067575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档