问题描述
我正在将从Jobs API获取的数据写入Google电子表格。 随后对“ latin-1”的编码进行编码,直到第93页,但是当达到94页时,它例外。 我使用了以下不同的技巧,但是'latin-1'做到了最大分页。 其他都已被评论(它们在第65页上死亡)。 您能否告诉我如何修改未注释的内容(即.encode('latin-1'))以使199页安全地写入电子表格? 代码如下:事先了解这方面的任何准则。
def append_data(self,worksheet,row,start_row, start_col,end_col):
r = start_row #last_empty_row(worksheet)
j = 0
i = start_col
while (i <= end_col):
try:
worksheet.update_cell(r,i,unicode(row[j]).encode('latin-1','ignore'))
#worksheet.update_cell(r,i,unicode(row[j]).decode('latin-1').encode("utf-
16"))
#worksheet.update_cell(r,i,unicode(row[j]).encode('iso-8859-1'))
#worksheet.update_cell(r,i,unicode(row[j]).encode('latin-1').decode("utf-
8"))
#worksheet.update_cell(r,i,unicode(row[j]).decode('utf-8'))
#worksheet.update_cell(r,i,unicode(row[j]).encode('latin-1', 'replace'))
#worksheet.update_cell(r,i,unicode(row[j]).encode(sys.stdout.encoding,
'replace'))
#worksheet.update_cell(r,i,row[j].encode('utf8'))
#worksheet.update_cell(r,i,filter(self.onlyascii(str(row[j]))))
except Exception as e:
self.ehandling_obj.error_handler(self.ehandling_obj.SPREADSHEET_ERROR,[1])
try:
worksheet.update_cell(r,i,'N/A')
except Exception as ee:
y = 23
j = j + 1
i = i + 1
1楼
您正在对字节字符串值调用unicode()
,这意味着Python必须首先解码为Unicode:
>>> unicode('\xea')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xea in position 0: ordinal not in range(128)
正是这种解码失败, 而不是从Unicode编码回字节字符串的编码。
您或者已经有Latin-1输入数据,或者应该使用适当的编解码器进行解码:
unicode(row[j], 'utf8').encode('latin1')
或使用str.decode()
:
row[j].decode('utf8').encode('latin1')
我在这里以UTF-8为例,您没有提供有关输入数据或其可能编码的任何详细信息。 您需要在这里自己选择合适的编解码器。