为了编码的URI中,我使用urllib.quote("schönefeld")
但是当一些非ASCII字符在字符串存在,则thorws
KeyError: u'\xe9'
Code: return ''.join(map(quoter, s))
我的输入字符串是köln, brønshøj, schönefeld
等。
当我试图只是印刷在窗口语句(使用python2.7,pyscripter IDE)。 但在linux下它会引发异常(我猜平台并不重要)。
这就是我想:
from commands import getstatusoutput
queryParams = "schönefeld";
cmdString = "http://baseurl" + quote(queryParams)
print getstatusoutput(cmdString)
探索问题的原因:在urllib.quote()
实际上是被肆意的异常return ''.join(map(quoter, s))
urllib中的代码是:
def quote(s, safe='/'):
if not s:
if s is None:
raise TypeError('None object cannot be quoted')
return s
cachekey = (safe, always_safe)
try:
(quoter, safe) = _safe_quoters[cachekey]
except KeyError:
safe_map = _safe_map.copy()
safe_map.update([(c, c) for c in safe])
quoter = safe_map.__getitem__
safe = always_safe + safe
_safe_quoters[cachekey] = (quoter, safe)
if not s.rstrip(safe):
return s
return ''.join(map(quoter, s))
之所以例外是''.join(map(quoter, s))
用于以s的每一个元素,加引号的功能将被调用,最终名单将被加入'并返回。
非ASCII字符è
,等效关键将是%E8
其呈现在_safe_map
变量。 但是,当我打电话引号(“E”),它将搜索键\xe8
。 所以,关键不存在,并抛出异常。
所以,我只是体改s = [el.upper().replace("\\X","%") for el in s]
之前调用''.join(map(quoter, s))
内try-except块。 现在,它工作正常。
但我讨厌什么,我所做的是正确的做法或会造成任何其他问题? 同时,我也对Linux有200多个实例,这是非常艰难的在所有情况下,部署此修复程序。