mysql字段到HTML模板(python unicode解码错误)

时间:2015-01-29 00:26:20

标签: python html mysql unicode

我需要将字段从mysql查询发送到HTML模板选择。这是我的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>    

此代码显示选择字段中的整行:[&#39; STRONG PALE ALE&#39;,&#39; ALE&#39;]

当我将表单选择值更改为

                  <option value="{{ e[0] }}">{{ e[0] }}                      
              </option>    

然后我得到一个unicode解码错误。

<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,但我无法使其正常工作。有人知道如何解决这个问题吗?编码字符串的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

从字面上理解报告的每一个细节(即假设你在报告中完全没有错误,也没有混淆你的代码的不同版本)我会感到难过:\xc4(大写字母A和变音符号,例如latin-1 )无处不在

然而,OP在评论中证实他 实际上混合了不同版本的代码,在这种情况下......:

一个好主意是使用cgi.escape(row[0].decode('ascii','replace'))&amp; c,并查看问号在哪里替换预期的字符。 OP在评论中证实了这对他们有用。

为了完整性,考虑具有类似问题的未来读者:如果decode没有显示任何内容,他们可以尝试使用encode,但这可能会提供OP最初报告的相同UnicodeDecodeError