我正在用python构建一个小型的RESTful API,目前在处理请求对象时遇到了字符编码的问题。
打到 http://server.com/api?q=äöü
而纵观 request.query['q']
得到的是 "崦",这显然不是我想要的。
同样的情况也适用于包含表单urlencoded key的POST请求。q
附带 äöü
. request.forms.get('q')
含有 "崦。
这到底是怎么回事?我真的没有选择用不同的编码来解码这些元素,或者我有吗?有没有一个通用的选项,让瓶子用unicode存储这些?
谢谢,我正在构建一个小型的REST系统。
request.query['q']
和 forms.get('q')
返回浏览器提交的原始字节值。该值 äöü
浏览器提交的UTF-8编码的字节,就是 '\xc3\xa4\xc3\xb6\xc3\xbc'
.
如果你打印该字节字符串,并且你打印的地方将其解释为ISO-8859-1,或类似的Windows代码第1252页,你将会得到 äöü
. 如果你是通过打印到Windows命令提示符或记事本显示的文件进行调试,这就是原因。
如果你使用 替代性直接财产准入 request.query.q
或 forms.q
Bottle 会给你 Unicode 字符串,用 UTF-8 解码字节版本。通常情况下,最好是尽可能使用这些Unicode字符串。(尽管你可能还是会在打印它们到控制台时遇到麻烦)。Windows命令提示符在处理非ASCII字符方面是出了名的糟糕,因此是一个调试Unicode问题的坏地方。)
在这种情况下,为了转换它,我像这样搜索_field.encode("ISO-8859-1").decode("utf-8")