Движок приложения - Python: UnicodeDecodeError: кодек «utf8» не может декодировать байт 0xe1 в позиции 1: недопустимый байт продолжения - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю на небольшом сервере Flask в App Engine (Google Cloud Platform) с Python версии 2.7, и у меня проблема с буквами с акцентом и буквой «-».Я делюсь своим кодом здесь:

@app.route('/faq', methods=['GET'])
def get_faq():
    response = _get_faq() 
    return json.dumps(response), 200, {'Content-Type': 'application/json'}

def _get_faq():
   db = MySQLdb.connect(host=CLOUDSQL_CONNECTION_HOST, user=CLOUDSQL_USER, passwd=CLOUDSQL_PASSWORD, use_unicode=True, charset='utf8')
   query = "SELECT question, answer FROM faq_table"
   cursor = db.cursor(cursorclass=MySQLdb.cursors.DictCursor)
   cursor.execute(query)
   result=cursor.fetchall()

   faq_response = []
   for row in result:
       faq_response.append(
           {
               "question": row["question"], 
               "answer": row["answer"]
           }
       )
   return faq_response

Но когда я загружаю этот код в App Engine и вызывается эта служба, сервер отправляет код 500 со следующим сообщением в отчете об ошибках:

UnicodeDecodeError: кодек «utf8» не может декодировать байт 0xf3 в позиции 22: недопустимый байт продолжения

Я не могу решить эту проблему следующим образом:

json.dumps(response).encode('utf-8')

Всегда у меня естьтот же ответ.Трассировка выглядит следующим образом:

с использованием кода итераций (/base/alloc/tmpfs/dynamic_runtimes/python27g/ec315266546cb44c/python27/python27_dist/lib/python2.7/json/encoder.py:270)

в кодировке (/base/alloc/tmpfs/dynamic_runtimes/python27g/ec315266546cb44c/python27/python27_dist/lib/python2.7/json/encoder.py:207)

в дампах (/ base /alloc / tmpfs / dynamic_runtimes / python27g / ec315266546cb44c / python27 / python27_dist / lib / python2.7 / json / init .py: 244)

в get_faq (/ base / data / home /apps / xxxxx / yyyyyyyy: nnnnnnn.mmmmmmm / main.py: 7)

Может кто-нибудь помочь?Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Попробуйте:

json.dumps(response.encode('utf-8'))
...