我想对字典应用程序使用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),并且可以将常规字符串打印到控制台就可以了。

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

最佳答案

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

关于python - 带非ASCII字符的bottle.py动态路由URL编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13510172/

10-15 10:11