Мне нужно отправить поля из запроса mysql в шаблон HTML-шаблона. Это мой питон код:Поля mysql для HTML-шаблона (ошибка декодирования unicode python)
class Estilos(webapp2.RequestHandler):
def get(self):
db = .....
cursor = db.cursor()
cursor.execute('SELECT estilo, n1 FROM estilos;')
lista = []
for row in cursor.fetchall():
lista.append([cgi.escape(row[0]),
cgi.escape(row[1])
])
variables = {'lista':lista}
template = JINJA_ENVIRONMENT.get_template('estilo.html')
self.response.write(template.render(variables))
db.close()
Это мой шаблон HTML:
<html>
<form action="/sign" method="post">
<br />
<div>Estilo: <select name="estilo" style="width:400px">
{% for e in lista %}
<option value="{{ e }}">{{ e }}
</option>
{% endfor %}
</select>
</div>
<div> N1: <select name="n1" style="width:400px">
{% for e in lista %}
<option value="{{ e }}" >{{ e }}
</option>
{% endfor %}
</select>
</div>
<div><input type="submit" value="Selecionar"></div>
</form>
Этот код показывает всю строку в поле выбора: [ 'STRONG Pale Ale', 'ALE']
Когда я изменить вид выберите значение
<option value="{{ e[0] }}">{{ e[0] }}
</option>
тогда я получаю ошибку юникода декодирования.
<option value="{{ e[0] }}">{{ e[0] }} UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range(128)
Я пытался кодировать cgi.escape в utf8, но я не могу заставить его работать. Кто-нибудь знает, как это исправить? Каков правильный способ кодирования строки?
Пожалуйста, отредактируйте Q, чтобы показать 'repr' заблуждающейся строки' - не зная, состоит ли она из байтов или строк юникода, или для кодировки, если какие-то байтовые строки, затрудняет вам помощь. –
Если я печатаю str(), я получаю: {'n1': 'ALE', 'estilo': 'STRONG PALE ALE'}. Если я напечатаю repr(), я получаю: {'n1': «ALE», «estilo»: «STRONG PALE ALE» »} –
Принимая буквально каждую деталь, которую вы сообщаете (т. Е. Предполагая, что вы не делали абсолютно никаких ошибок в отчетности и смешали разные версии вашего кода). Я в тупике: это '\ xc4' (верхний регистр A с умляутом, если, например, латинский-1), появляется из ниоткуда. Попробуйте использовать 'cgi.escape (row [0] .decode ('ascii', 'replace'))' & c и посмотреть, где вопросительные знаки заменяют символы, которые вы ожидали (если 'decode' ничего не показывает, попробуйте' encode' вместо этого, но что, скорее всего, даст вам тот же UnicodeDecodeError, который вы получаете сейчас). –