2015-08-14 6 views
0

Я пытался экспортировать некоторые данные из базы данных Google Cloud SQL в файл excel, используя Python xlsxwriter, webapp2, appengine в отложенной задаче.UnicodeDecodeError while cursor.fetchall()

Данные, которые должны быть записаны, должны быть получены из базы данных.

Запрос выполняется нормально, но когда я пытаюсь извлечь данные из запроса либо с помощью cursor.fetchall() или итерации курсора он бросает следующее сообщение об ошибке:

UnicodeDecodeError: 'utf8' кодек не может декодировать байт 0x9F в положении 4: неверный старт байта

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.

В данных может быть проблема с кодировкой, но это должно возникнуть при записи в файл.

Я попытался найти некоторые данные, которые могут быть повреждены, но не смогли найти их.

ответ

0

У вас нет текста, закодированного в utf8. Что кодируется? Если это latin1, то 9F означает Ÿ; это имело бы смысл? Найдите строку с шестнадцатеричным 9f; давайте посмотрим на контекст.