用Python解析多个vCard

3 投票
1 回答
1261 浏览
提问于 2025-04-17 18:15

我从谷歌的联系人导出功能得到了一个vcf文件。这个文件是用UTF-8编码的,但我的WinMobile手机需要win1251编码才能导入到通讯录里。我把它重新编码成win1251格式,并尝试使用vObject库来解析这个文件。结果我得到的内容有些字段正确地编码成了Unicode,而有些字段却变成了“?????”这样的文本。

 VCARD
    TEL: +7812000000
    params for  TEL:
       aKey TYPE [u'CELL']
    TEL: +7921000000
    params for  TEL:
       aKey TYPE [u'HOME']
    URL: http\://www.diamantstroy.spb.ru
    X-ABLABEL: _$!<HomePage>!$_
    N:  Alexei  ??????? 
    VERSION: 3.0
    ORG: [u'\u041e\u041e\u041e \u0414\u0438\u0430\u043c\u0430\u043d\u0442-\u0421\u0442\u0440\u043e\u0439-\u0421\u0435\u0440\u0432\u0438\u0441']
    FN: Alexei ???????

我找不到源代码中应该在哪里应用某种encode()/decode()的补丁来满足我的需求。有人能帮我吗?

1 个回答

0

确保你传给 readOne(或者你用的任何解析函数)的输入是unicode格式。如果你想回到Windows-1251编码,在解析完vcard后,可以使用 result.encode('cp1251') 或者 codecs.open(filename, 'w', 'cp1251').write(result)

你现在的流程有点让人困惑。你是从 phone -> google -> code 这个方向走,还是因为你提到的 expects,所以是 google -> code -> phone 这个方向呢?

这个 回答 可能对你进行转换会有帮助。

撰写回答