2012-11-22 69 views
2

我想用bottle(bottlepy,bottle.py)對於字典應用程序允許輸入要在URL(GET)中指定像與非ASCII字符bottle.py動態路由URL編碼

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/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 

輸出進行解碼,以字符 ö - > c3b6

,但我不知道如何解決編碼混亂.. 我想這bottle.py需要照顧這。

腳本使用# -*- coding: utf-8 -*-(也是該文件是UTF-8 BOM)和普通字符串打印到控制檯就好了。

軟件版本: bottle.py: '0.11.4' 和 '0.12-dev的' 的Python 3.2.3(默認情況下,2012年4月11日,7時15分24秒)[MSC v.1500 32位(英特爾)]在Win32

+0

對於其他編碼問題的話,看到的說明在:http://bottlepy.org/docs/dev/ tutorial.html#unicode-issues 詳細信息請參閱http://blog.bottlepy.org/ 郵件列表https://groups.google.com/forum/?fromgroups=#!forum/bottlepy 這似乎s密切相關https://groups.google.com/d/topic/bottlepy/Vqb6fKjFN28/discussion – handle

+0

我已經在上述組中發佈了此問題:https://groups.google.com/forum/? fromgroups =#!論壇/ bottlepy(線程未顯示) – handle

+0

後現在可以在https://groups.google.com/d/topic/bottlepy/w-gqcHt2Yzs/discussion – handle

回答

0

編碼您在US-ASCII和在接收到路由處理解碼所需的字符集

+0

嗨,謝謝,但解決方案需要使用標準編碼,即直接用戶輸入。雖然我不確定瀏覽器的編碼是否是標準的,但爲了我的目的,它可能被視爲這樣。 – handle

+0

瀏覽器使用US-ASCII。 [RFC 2616](http://www.ietf.org/rfc/rfc2616.txt) – tousif

+0

對不起,我的意思是我不知道所有瀏覽器是否支持百分比編碼,也不知道這是否是需求。請按照我對該問題的評論中的鏈接瞭解如何處理編碼以及在哪些情況下可能會進行轉換。儘管如此,感謝您的幫助。 – handle