我试图在延期任务中使用Python xlsxwriter,webapp2和appengine将Google Cloud SQL数据库中的某些数据导出到excel文件中。
必须从数据库中检索要写入的数据。
查询执行得很好,但是当我尝试使用cursor.fetchall()或通过遍历游标从查询中获取数据时,将引发以下错误:
UnicodeDecodeError:'utf8'编解码器无法解码位置4的字节0x9f:无效的起始字节
stacktrace是:
for row in cursor:
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 689, in fetchone
self._FetchMoreRows()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 606, in _FetchMoreRows
self._DoExec(request)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 448, in _DoExec
return self._HandleResult(response.result)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 487, in _HandleResult
new_rows = self._GetRows(result)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 532, in _GetRows
tuple_proto.values[value_index]))
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 402, in _DecodeVariable
return converter(value)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/storage/speckle/python/api/converters.py", line 126, in Str2Unicode
return unicode(arg, 'utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9f in position 4: invalid start byte
如果我尝试使用MySQLdb而不是rdbms在本地运行该代码,则可以使用相同的代码。
数据中可能存在一些编码问题,但是应该在写入文件时出现。
我尝试查找一些可能已损坏但无法找到的数据。
最佳答案
您没有使用utf8编码的文本。它是用什么编码的?如果是latin1,则9F
代表Ÿ
;那有意义吗?用十六进制9f查找行;让我们看看上下文。