当前位置: 代码迷 >> python >> UnicodeDecodeError:'ascii'编解码器无法解码位置8的字节0xea:序数不在范围内(128)
  详细解决方案

UnicodeDecodeError:'ascii'编解码器无法解码位置8的字节0xea:序数不在范围内(128)

热度:143   发布时间:2023-06-19 09:19:30.0

我正在将从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

您正在对字节字符串值调用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为例,您没有提供有关输入数据或其可能编码的任何详细信息。 您需要在这里自己选择合适的编解码器。

  相关解决方案