Python 将unicode编码为utf-8的两个循环

Python 将unicode编码为utf-8的两个循环,python,flask,Python,Flask,我是flask的新手,我想在web上显示mysql数据。但它是unicode,所以我尝试使用两个for来解决它。但现在我想知道为什么我可以使用两个for循环将unicode编码为utf-8 烧瓶代码 #coding=utf-8 from flask import Flask, request, render_template from flaskext.mysql import MySQL mysql = MySQL() app = Flask(__name__) app.config['M

我是flask的新手,我想在web上显示mysql数据。但它是unicode,所以我尝试使用两个for来解决它。但现在我想知道为什么我可以使用两个for循环将unicode编码为utf-8
烧瓶代码

#coding=utf-8
from flask import Flask, request, render_template
from flaskext.mysql import MySQL

mysql = MySQL()
app = Flask(__name__)

app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = ''
app.config['MYSQL_DATABASE_DB'] = 'test'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'

mysql.init_app(app)

@app.route('/')
def showbookname():
    cursor = mysql.get_db().cursor()
    cursor.execute("SELECT * FROM manager ")
    bookname = cursor.fetchall()
    return render_template('book.html', bookname = bookname)

if __name__ == '__main__':
    app.run( debug = True)
错误的HTML


标题
{{bookname}}

不幸的是,您的期望不正确。原始输出是正确的-您正在打印行列表本身,这不是unicode问题。这意味着行必须以某种可能显示的方式序列化。在本例中,这是
((列,列,…),(列,列,…)
。它来自python的
repr(bookname)
,您不应该依赖它以任何特定的方式查看。恰好通过在
u
前面加上前缀来显示哪些字符串是unicode

如果想要获得预期的输出,必须自己构建:

(
{% for items in bookname %}
    (
    {% for item in items %}
        {{ item }}
        {% if not loop.last %}
            ,
        {% endif %}
    {% endfor %}
    )
    {% if not loop.last %}
        ,
    {% endif %}
{% endfor %}
)

如果不希望在输出中使用空白,则必须从模板中删除空白。但我认为,实际上您需要不同的输出格式—只需调整模板即可。

这与unicode无关,但当您使用
cursor.fetchall()
方法时,它会返回元组列表。类似这样的内容:
[(…,…),(…,…)]
。这就是为什么您需要首先遍历
列表
,然后遍历
元组
,以获得所需的值。非常感谢您,viraptor。