【发布时间】:2012-12-24 10:09:54
【问题描述】:
我在 Mako 模板中有以下代码:
<a href="#" onclick='getCompanyHTML("${fund.investments[inv_name].name | u}"); return false;'>${inv_name}</a>
这会将 url 转义应用于代表公司的对象的名称字符串。然后在 url 中使用生成的转义字符串。 Mako 文档指出,url 编码是使用urllib.quote_plus(string.encode('utf-8')) 提供的。
在服务器上,我在参数investment_name 中收到公司名称部分:
def Investment(client, fund_name, investment_name, **kwargs):
client = urllib.unquote_plus(client)
fund_name = urllib.unquote_plus(fund_name)
investment_name = urllib.unquote_plus(investment_name)
然后,我使用investment_name 作为键返回到模板中从中提取它的同一个字典。
这适用于所有标准情况,例如公司名称中的空格、斜杠和单引号。但是,如果公司名称包含 ascii 字符集之外的 unicode 字符,则会失败。
例如,公司名称“Eptisa Servicios de Ingeniería S.L.”的网址呈现为“Eptisa+Servicios+de+Ingenier%C3%ADa+S.L.”当此值返回服务器时,我正在反转 url 转义但显然无法正确解码 unicode,因为我尝试将结果用作字典键会产生键错误。
我试过以这两种形式添加 unicode 解码,但没有运气:
investment_name = urllib.unquote_plus(investment_name.decode('utf-8'))
investment_name = urllib.unquote_plus(investment_name.encode('raw_unicode_escape').decode('utf-8'))
谁能建议我必须对“Eptisa+Servicios+de+Ingenier%C3%ADa+S.L.”做什么把它改回“Eptisa Servicios de Ingeniería S.L.”?
【问题讨论】:
标签: unicode python-2.7 escaping cherrypy mako