2017-11-29 25 views
0

아래 "str1"로 전달되는 Google 시트에서 텍스트로 텍스트를 읽습니다.'utf8'코덱은 쿼리 결과를 csv에 쓸 때 0x92 바이트를 디코딩 할 수 없습니다.

File "<stdin>", line 2, in <module> 
    File "/Library/Python/2.7/site-packages/openpyxl/worksheet/worksheet.py", line 790, in append 
    cell = Cell(self, row=row_idx, col_idx=col_idx, value=content) 
    File "/Library/Python/2.7/site-packages/openpyxl/cell/cell.py", line 114, in __init__ 
    self.value = value 
    File "/Library/Python/2.7/site-packages/openpyxl/cell/cell.py", line 294, in value 
    self._bind_value(value) 
    File "/Library/Python/2.7/site-packages/openpyxl/cell/cell.py", line 191, in _bind_value 
    value = self.check_string(value) 
    File "/Library/Python/2.7/site-packages/openpyxl/cell/cell.py", line 150, in check_string 
    value = unicode(value, self.encoding) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 48: invalid start byte 

데이터는 (우리가 발행인) 저자/문서 정보에 관한됩니다 : 제목에서와 같이 나는 오류가

# get query string from google sheets 
# establish database connection 
cursor = conn.cursor() 
cursor.execute((str1)) 
results1 = cursor.fetchall() 
cursor.close() 
from openpyxl import Workbook 
wb = Workbook() 
ws = wb.active 
for row in results1: 
    ws.append(row) 

하는 시점에서 : 여기 내 코드입니다. 그것은 페이스 북의 광고에 콘텐츠 ID, 사이트 코드, 선별, 저자, 링크를 포함하고 당기 날짜/시간

를 다음 오류 보유 데이터의 행의 예입니다 : 내가 읽고

(1693279, 'CPD', 'Morgan Dietrich', "20 Intuitive People Share Their 'Something Doesn\x92t Feel Right' Story That Turned Out To Be True", 'business.facebook.com/550634765042035/posts/…;, datetime.datetime(2017, 11, 29, 20, 49, 24)) 

을 이 오류에 관해 많은 질문이 있지만 해결책을 찾을 수는 없습니다. - 성공적으로 실행 - 쿼리 (results1)의 결과는이 같은 튜플 있습니다

((query result ro1/col1, query result ro1/col2, query result ro1/col3), 
    (query result ro2/col1, query result ro2/col2, query result ro2/col3), ... etc...) 

내가 시도 함수 .encode/.decode하지만 그들은 튜플에 작동하지 않습니다. 나는 나쁜 문자에 대한 필터링 시도했지만 작동하지 않았다.

어떻게 전 세계에서이 문제가 해결됩니까? 이 utf8 관련 오류로 인해 과거에 너무 많은 성가심을 느끼게되었고,이 모든 것을 읽은만큼 여전히 상당히 혼란스러워 보입니다.

실패 행은 당신이 그들에 비 ASCII와 비 UTF8 데이터와 데이터를 bytestring 한

(1693279, 
'CPD', 
'Morgan Dietrich', 
"20 Intuitive People Share Their 'Something Doesn\x92t Feel Right' Story That Turned Out To Be True", 
'https://business.facebook.com/550634765042035/posts/1223000787805426', 
datetime.datetime(2017, 11, 29, 20, 49, 24)) 
+0

* 마지막 줄뿐만 아니라 예외의 * 전체 추적 *을 포함하십시오. 그렇게하면 파이썬이 어디에 문제가 있는지, 그리고 파이썬이 어떻게 문제가 있는지 알 수 있습니다. 예외는 우리에게별로 도움이되지 않습니다. –

+0

또한 행에 포함 된 데이터의 유형을 알아야 할 수도 있습니다. 이 데이터는 어디에서 왔습니까? 어떤 종류의 텍스트가 포함되어 있습니까? –

+0

죄송합니다. 전 새로운 문제입니다. 요청한 정보를 포함 시켰습니다. 다른 것이 필요하면 알려주세요. –

답변

0

입니다. 네 번째 열 대신 유니 코드 문자열을 반환하도록 데이터베이스를 구성하거나 수동으로 디코딩해야합니다. 는 Windows 코드 페이지 1252으로 데이터를 디코딩하는 경우

는 0x92 바이트는 U+2019 RIGHT SINGLE QUOTATION MARK 코드 포인트 (또는 동일한 범위에서 다른 창 코드 페이지의 번호를하지만, 1252, 그렇지 않으면 영어 텍스트에 가장 가능성이) 그냥 시도 할 수 있도록, 그 :

for row in results1: 
    row = list(row) # convert to list for easier mutation 
    row[3] = row[3].decode('cp1252') 
    ws.append(row) 
+0

정말 고마워요! 효과가있었습니다. 다음 번에도 내 질문을보다 적절하게 형식화하려고 노력할 것입니다. –