我想对字典应用程序使用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/