【发布时间】:2021-02-11 00:50:55
【问题描述】:
我偶然发现了一个奇怪的 Unicode Flask 中的 URL 编码问题。
@app.route("/it2/<string:name>")
def render_it2(name=""):
name = _fix_encoding(name)
return _render_file("it2", name)
当name 包含Unicode 字符时,
它们被解码为iso-8859-1
而不是utf-8。
所以我不得不添加_fix_encoding 函数:
def _fix_encoding(string):
return string.encode('iso-8859-1').decode('utf8')
我知道这是肮脏的黑客行为, 这就是为什么我想问 Flask/Werkzeug 大师, 我的设置有什么问题?为了使 URL 已经以 UTF-8 解码,我应该进行哪些更改,这样就不需要这种丑陋的重新编码?
关于 SO 有很多类似的问题/答案,但没有真正有用的回答,例如:
我想应该有一些环境变量,或者一些影响默认 Flask 编码的配置选项。
我在该主机上有以下LANG/LC_*:
$ echo $LANG
en_US.UTF-8
$ export | grep LC
declare -x LC_ADDRESS="en_US.UTF-8"
declare -x LC_IDENTIFICATION="en_US.UTF-8"
declare -x LC_MEASUREMENT="en_US.UTF-8"
declare -x LC_MONETARY="en_US.UTF-8"
declare -x LC_NAME="en_US.UTF-8"
declare -x LC_NUMERIC="en_US.UTF-8"
declare -x LC_PAPER="en_US.UTF-8"
declare -x LC_TELEPHONE="en_US.UTF-8"
declare -x LC_TIME="en_US.UTF-8"
没有iso-8859-1。它来自哪里?
【问题讨论】:
-
生成 URL 中使用的“名称”的代码在哪里?就这部分代码而言,“名称”只是一个输入:它是在其他地方使用不正确的编码创建的。
-
@jsbueno 我真的不明白你的问题。你的意思是什么代码?它是一个单行的 Flask 应用程序;
import Flask还有这个函数,就是整个代码
标签: python python-3.x flask unicode werkzeug