3

我正在编写一个小脚本,允许我将 Facebook 联系人的电子邮件地址导入 GMail/Android。我的输入文件包含 unicode 字符,例如:Jasmin L\u00f3pez。生成的 CSV 输出文件如下所示:

Andr\u00e9 Zzz,,,,,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * 我的联系人,* 主页,zzz@yahoo.com
Andr\u00e9ia Ggg ,,,,,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * 我的联系人,* 主页,ggg@hotmail.com
Andr\u00e9s Bbb,,,, ,,,,,,,,,,,,,,,,,,,,,,fbcontacts ::: * 我的联系人,* 主页,bbb@gmail.com

如您所见,我的编码有问题。我正在创建一个 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(','))

请问有什么想法吗?我对python很陌生,每次我必须使用编码时,它都不能像我想的那样工作=(

非常感谢你的帮助!

4

1 回答 1

3

如果我理解正确,您的文件不包含高 unicode 字符;它只包含 unicode 转义序列,例如表示高 unicode 字符的“\u00f3”。如果您的文件实际上包含字符串“Jasmin L\u00f3pez”(带有文字反斜杠和 u),那么您需要在写入之前将其解码为实际的 unicode 字符。看一下unicode_escape编解码器。

>>> x = b"\u00f3"
>>> print x
\u00f3
>>> print x.decode('unicode_escape')
ó
于 2012-09-21T18:25:40.277 回答