使用非ASCII字符的bottle.py动态路由URL编码

时间:2012-11-22 10:04:44

标签: python url encoding bottle

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

http://dictionary_domain/lookup/Thanksgiving
使用

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

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

..查找/Olivenöl:

"Olivenöl"

..查找/ OL:

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

输出解码为     Ã - - &gt; c3b6

但我不知道如何解决编码问题.. 我想bottle.py需要处理这个问题。

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

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

1 个答案:

答案 0 :(得分:0)

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