2012-09-21 5 views
3

페이스 북 담당자의 이메일 주소를 Gmail/Android로 가져올 수있는 간단한 스크립트를 작성하고 있습니다. 제 입력 파일에 유니 코드 문자가 있습니다 : Jasmin L \ u00f3pez. 생성 된 CSV 출력 파일은 다음과 같다 :파이썬 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 파일을 만들고 있지만 이름이 올바르게 표시되어야합니다.

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(',')) 

어떤 생각하십시오 : 나는 CSV를 작성하는이 기능을 사용하고 있습니다? 내가 좋아하는 것처럼 내가 파이썬 내가 인코딩을 사용해야 할 때마다 아주 새로운 해요, 그것은 작동하지 않습니다 = (

도와 주셔서 감사합니다 많이!

답변

3

내가 바로 당신을 이해한다면, 당신의 파일 높은 유니 코드 문자를 포함하지 않으며 유니 코드 문자를 나타내는 "\ u00f3"과 같은 유니 코드 이스케이프 시퀀스 만 포함합니다. 파일에 실제로 "Jasmin L \ u00f3pez"문자열이 포함 된 경우 (리터럴 백 슬래시 및 u와 함께) 를 작성하기 전에 실제 유니 코드 문자가 디코딩해야합니다. unicode_escape 코덱을 살펴보십시오.

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

감사를 당신의 빠른 대답을, 그것을 작동합니다 콘솔에서 훌륭하지만 CSV에 글을 쓰려고하면 UnicodeEncodeError : 'ascii'코덱은 U '\ xe3'을 3의 위치에 인코딩 할 수 없습니다. 서수는 범위에 없습니다 (128). 어떤 단서? –

+0

고정, 고마워요 !!! –

+0

이 문제를 해결하기 위해 무엇을 했습니까? –