2013-09-04 8 views
0

에 쓰는 동안 파일에 쓰는 동안 나는이 오류가 발생합니다. 어떻게 처리 할 수 ​​있습니까? 내가 잘 작동하는 HTML 데이터와 먹으 렴을 구문 분석 BeautifulSoup로 사용하고 파일UnicodeDecodeError : 파일

class UnicodeWriter: 
    """ 
    A CSV writer which will write rows to CSV file "f", 
    which is encoded in the given encoding. 
    """ 

    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds): 
     # Redirect output to a queue 
     self.queue = cStringIO.StringIO() 
     self.writer = csv.writer(self.queue, dialect=dialect, **kwds) 
     self.stream = f 
     self.encoder = codecs.getincrementalencoder(encoding)() 

    def writerow(self, row): 
     self.writer.writerow([s.encode("utf-8") for s in row]) 
     # Fetch UTF-8 output from the queue ... 
     data = self.queue.getvalue() 
     data = data.decode("utf-8") 
     # ... and reencode it into the target encoding 
     data = self.encoder.encode(data) 
     # write to the target stream 
     self.stream.write(data) 
     # empty queue 
     self.queue.truncate(0) 

    def writerows(self, rows): 
     for row in rows: 
      self.writerow(row) 

with open('C:/Users/Desktop/fboutput.csv', 'wb') as f: 
    writer = UnicodeWriter(f) 
    rows = [[unicode(x) for x in row] for row in outlist] 
    writer.writerows(rows) 

로 작성하기위한

Traceback (most recent call last): 
    File "C:\Python27\AureusBAXProjectFB.py", line 278, in <module> 
    rows = [[unicode(x) for x in row] for row in outlist] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128) 
>>> 

코드입니다. 파일에 쓰는 동안에 만 오류가 발생합니다.

+0

문자열은 이미 유니 코드,하지만 유니 코드 (x)는'유니 코드로를 설정하는'사용하는 유일한 문자 서수 0 ~ 127을 지원하는 기본'ascii' 코덱을 사용하지 않아야합니다. 'outlist'를 채우는 코드를 보여줍니다. –

답변

0

유니() 생성자 unicode(string[, encoding, errors]) 정의 및 인코딩은 기본 아스키 갖는다. 멀티 바이트 문자열이 outlist에 있으면 utf-8과 같이 유니 코드 인코딩을 지정해야합니다. outlist``에서