我在 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 SL”的 url 呈现为“Eptisa+Servicios+de+Ingenier%C3%ADa+SL” 当该值返回服务器时,我正在反转 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+SL”做些什么才能将其变回“Eptisa Servicios de Ingeniería SL”吗?