Python瓶请求和unicode

Kil*_*ian 8 python unicode bottle

我正在使用python中的瓶子构建一个小的RESTful API,并且在处理请求对象时,我目前遇到了字符编码问题.

点击http://server.com/api?q=äöü并查看request.query['q']服务器让我"äÃü",这显然不是我想要的.

对于包含q带有值的form-urlencoded键的POST请求也是如此äöü.request.forms.get('q')包含"äÃü".

这里发生了什么?我真的没有选择用不同的编码解码这些元素,还是我?是否有通用选项将瓶子存储在unicode中?

谢谢.

bob*_*nce 10

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

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

如果您使用替代直接属性访问 request.query.qforms.qBottle将为您提供Unicode字符串,使用UTF-8从字节版本解码.通常最好在任何地方使用这些Unicode字符串.(尽管仍可能有麻烦打印他们安慰.在Windows命令提示符是出了名可怕的非ASCII字符的应对,这样是不好的地方是调试Unicode的问题.)