2013-03-07 15 views
3

У меня есть файл vcf из функции экспорта контактов Google. Он был закодирован с UTF-8, но мой телефон WinMobile ожидает, что win1251 символов будут импортированы в контактную книгу. Я перекодировал его в win1251 и попытался разобрать файл, используя библиотеку vObject. В результате я получил смесь полей, некоторые из которых были правильно закодированы в Unicode, а некоторые были заменены на «?????» текст. К примеру я включаю prettyPrint такого контакта:Разбор нескольких vCards с Python

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 ??????? 

То, что я не могу найти это место в исходном коде, где я должен применить какое-то закодировать()/декодирование() патча, чтобы соответствовать моим потребностям , Может кто-нибудь мне помочь?

+0

Немного смущает, какой поток вы собираетесь пройти. Вы делаете код телефона -> google ->, или, поскольку вы используете слово «Ожидает», вы делаете google -> code -> phone? – tmthydvnprt

ответ

0

Убедитесь, что ваш ввод является unicode, когда вы передаете его readOne (или независимо от того, какую функцию анализа вы используете). Если вы хотите вернуться к кодировке Windows-1251, после того, как вы проанализируете использование vcard, используйте result.encode('cp1251') или codecs.open(filename, 'w', 'cp1251').write(result).

Немного смущает, какой поток вы собираетесь пройти. Делаете ли вы phone -> google -> code, или используете слово expects, Вы делаете google -> code -> phone?

Этот answer может помочь с конверсиями.