我正在编写一个小脚本,允许我将我的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很新,每次我都要使用编码,它不能正常工作=(
非常感谢你的帮助!
答案 0 :(得分:3)
如果我理解你,你的文件不包含高unicode字符;它只包含代表高unicode字符的unicode转义序列,如“\ u00f3”。如果您的文件实际上包含字符串“Jasmin L \ u00f3pez”(带有字面反斜杠和u),那么在编写之前您需要将其解码为实际的unicode字符。看一下unicode_escape
编解码器。
>>> x = b"\u00f3"
>>> print x
\u00f3
>>> print x.decode('unicode_escape')
ó