Python瓶请求和unicode

问题描述 投票:8回答:2

我正在用python构建一个小型的RESTful API,目前在处理请求对象时遇到了字符编码的问题。

打到 http://server.com/api?q=äöü 而纵观 request.query['q'] 得到的是 "崦",这显然不是我想要的。

同样的情况也适用于包含表单urlencoded key的POST请求。q 附带 äöü. request.forms.get('q') 含有 "崦。

这到底是怎么回事?我真的没有选择用不同的编码来解码这些元素,或者我有吗?有没有一个通用的选项,让瓶子用unicode存储这些?

谢谢,我正在构建一个小型的REST系统。

python unicode bottle
2个回答
10
投票

request.query['q']forms.get('q') 返回浏览器提交的原始字节值。该值 äöü浏览器提交的UTF-8编码的字节,就是 '\xc3\xa4\xc3\xb6\xc3\xbc'.

如果你打印该字节字符串,并且你打印的地方将其解释为ISO-8859-1,或类似的Windows代码第1252页,你将会得到 äöü. 如果你是通过打印到Windows命令提示符或记事本显示的文件进行调试,这就是原因。

如果你使用 替代性直接财产准入 request.query.qforms.q Bottle 会给你 Unicode 字符串,用 UTF-8 解码字节版本。通常情况下,最好是尽可能使用这些Unicode字符串。(尽管你可能还是会在打印它们到控制台时遇到麻烦)。Windows命令提示符在处理非ASCII字符方面是出了名的糟糕,因此是一个调试Unicode问题的坏地方。)


0
投票

在这种情况下,为了转换它,我像这样搜索_field.encode("ISO-8859-1").decode("utf-8")

© www.soinside.com 2019 - 2024. All rights reserved.