【问题标题】:bottle.py dynamic route URL encoding with non-ASCII characters使用非 ASCII 字符的 bottle.py 动态路由 URL 编码
【发布时间】:2012-11-22 10:04:43
【问题描述】:

我想将bottle (bottlepy, bottle.py) 用于字典应用程序,允许在 URL (GET) 中指定输入,例如

http://dictionary_domain/lookup/Thanksgiving

使用

@bottle.route('/lookup/<word>')
def request( word="" ):
    print(word)

问题是,非 ASCII 字符是 URL-encoded(通常,浏览器会处理这个问题),并且 bottle.py 的解析或我的一般字符编码设置似乎有问题。 例子:

..lookup/Olivenöl:

"Olivenöl"

..lookup/Öl:

Traceback (most recent call last):
    File "bottle.py", line 763, in _handle
        return route.call(**args)
    File "bottle.py", line 1572, in wrapper
        rv = callback(*a, **ka)
    File "dictionary.py", line 63, in request
        print( "bottle: \"{}\" requested".format( word ) )
    File "C:\Python32\lib\encodings\cp850.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x96' in position 10: character maps to <undefined>

有问题的字符编码为

capital  Ö -> %C3%96
minscule ö -> %C3%B6

输出解码为 ö -> c3b6

但我不知道如何修复编码混乱.. 我想bottle.py 需要处理这个问题。

脚本使用# -*- coding: utf-8 -*-(文件也是带有BOM的UTF-8),常规字符串打印到控制台就好了。

软件版本: 瓶子.py:“0.11.4”和“0.12-dev” Python 3.2.3(默认,2012 年 4 月 11 日,07:15:24)[MSC v.1500 32 位(英特尔)] 在 win32 上

【问题讨论】:

标签: python url encoding bottle


【解决方案1】:

用 US-ASCII 编码您的单词,并在接收到路由处理程序时解码为所需的字符集

【讨论】:

  • 您好,谢谢,但解决方案需要使用标准编码,即直接用户输入。不过,我不确定浏览器的编码是否是标准的,但出于我的目的,它可能会被视为标准。
  • 对不起,我的意思是我不知道是否所有浏览器都支持百分比编码,也不知道这是否是必需的。请点击我对问题的评论中的链接,了解如何处理编码以及在什么情况下可以转换编码。不过,感谢您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2021-07-28
相关资源
最近更新 更多