2012-09-21 45 views
3

我正在寫一個腳本,允許我將我的Facebook聯繫人的電子郵件地址導入GMail/Android。我的輸入文件有unicode字符,如:Jasmin L \ u00f3pez。生成的CSV輸出文件如下所示:Python CSV編碼

Andr\u00e9 Zzz,,,,,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * My Contacts,* Home,[email protected]
Andr\u00e9ia Ggg,,,,,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * My Contacts,* Home,[email protected]
Andr\u00e9s Bbb,,,,,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * My Contacts,* Home,[email protected]

正如您所看到的,我在編碼方面遇到了問題。我正在創建Google通訊錄CSV文件,但我需要正確顯示名稱。我正在使用此功能編寫CSV:

def writecsv(self): 
    if self.outfile is not '': 
     #fh = open(self.outfile, 'wb') 
     #fh = codecs.open(self.outfile, "wb", "utf-8") 
     fh = codecs.open(self.outfile, 'wb', encoding="latin-1") 
    else: 
     fh = sys.stdout 

    csvhdlr = csv.writer(fh, quotechar='"', quoting=csv.QUOTE_MINIMAL) 
    csvhdlr.writerow("Name,Given Name,Additional Name,Family Name,Yomi Name,Given Name Yomi,Additional Name Yomi,Family Name Yomi,Name Prefix,Name Suffix,Initials,Nickname,Short Name,Maiden Name,Birthday,Gender,Location,Billing Information,Directory Server,Mileage,Occupation,Hobby,Sensitivity,Priority,Subject,Notes,Group Membership,E-mail 1 - Type,E-mail 1 - Value".split(','))   
    for contact in self.clist: 
     #csvhdlr.writerow(dict((vname, vtype, vnotes, vstereotype, vauthor, valias, vgenfile.encode('utf-8')) for vname, vtype, vnotes, vstereotype, vauthor, valias, vgenfile in row.iteritems())) 
     row = contact.fullname + ',,,,,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * My Contacts,* Home,' + contact.email 
     csvhdlr.writerow(row.split(',')) 

有什麼想法嗎?我是很新的蟒蛇,每次我都用的編碼,這是行不通的,因爲我想=(

非常感謝您的幫助!

回答

3

如果我理解你的權利,你的文件如果你的文件實際上包含了字符串「Jasmin L \ u00f3pez」(帶有字面反斜槓和u),那麼你將會使用unicode轉義序列,如「\ u00f3」需要解碼的是實際的Unicode字符寫它。看看在unicode_escape編解碼器。

>>> x = b"\u00f3" 
>>> print x 
\u00f3 
>>> print x.decode('unicode_escape') 
ó 
+0

感謝您的快速回答,它的工作原理偉大的控制檯,但是當我嘗試寫入csv,我得到這個:UnicodeEncodeError:'ascii'編解碼器不能編碼字符u'\ xe3'在位置3:序號不在範圍(128)。任何線索? –

+0

修好了,非常感謝! –

+0

你做了什麼來解決這個問題? –