当前位置: 首页 > 知识库问答 >
问题:

解码包含unicode字符的URL

濮佑运
2023-03-14

我在Mako模板中有以下代码:

<a href="#" onclick='getCompanyHTML("${fund.investments[inv_name].name | u}"); return false;'>${inv_name}</a>

这将url转义应用于表示公司的对象的名称字符串。然后在URL中使用得到的转义字符串。Mako文档说明使用urllib.quote_plus(string.encode('UTF-8'))提供url编码。

在服务器上,我将公司名称部分接收到参数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.”的url呈现为“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.”?

共有1个答案

孙阳舒
2023-03-14

按照相反的顺序执行:首先取消引号,然后取消.decode('UTF-8')

不要混合字节和Unicode字符串。

import urllib

q = "Eptisa+Servicios+de+Ingenier%C3%ADa+S.L."
b = urllib.unquote_plus(q)
u = b.decode("utf-8")
print u

注意:print u可能产生UnicodeEncodeError。要修复它,请执行以下操作:

print u.encode(character_encoding_your_console_understands)

或设置pythonioencode环境变量。

在Unix上,您可以尝试locale.getPreferreDencode()作为字符编码,在Windows上请参阅chcp的输出

 类似资料:
  • 问题内容: 我有一个字符串存储为: 有没有办法我可以转换成? 问题答案: 您可以为此使用: 输出:

  • 问题内容: 我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E /;)。当我在记事本中打开此文件时,它看起来还可以。 我使用的代码: 问题答案: 首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么? 在那之后,它相对简单- 您需要创建一个包

  • 问题内容: 我从HTML页面中将一个字符串输入到Java HTTPServlet中。根据我的要求,我得到了显示汉字的ASCII码: “&#21487;&#20197;&#21578;&#35785;&#25105;” (无空格) 如何将该字符串转换为Unicode? HTML代码: Java代码: 如果我打印问题[0],则会得到以下值:“&#21487;&#20197;&#21578;&#3578

  • 问题内容: 我遇到了三个UTF-8刺痛: 我只想要前10个ascii-char-width,这样一栏中的括号即可: 在控制台中: 一个中文字符是三个字节,但是在控制台中显示时,它只有2个ascii字符宽度: 当UTF-8字符混入时,python并没有帮助 这不是很漂亮: -----------Songs----------- |1: Butterfly| |2: city of heart| |3

  • 问题内容: 在下面查看我的代码。我有一个包含Unicode字符代码的JSON字符串。我将其转换为Java对象,然后将其转换回JSON字符串。但是,您可以看到输入和输出JSON字符串不匹配。是否可以使用Gson将我的对象转换为原始JSON字符串?我想和一样。 问题答案: 不幸的是,Gson似乎不支持它。所有JSON输入/输出分别集中在Gson(从2.8.0开始)和。可以使用其私有方法读取Unicod

  • 问题内容: 我有一些json,我需要解码,更改然后编码,而不会弄乱任何字符。 如果我在json字符串中包含unicode字符,它将无法解码。我不知道为什么,因为json.org说一个字符串可以包含:。但这在python中也不起作用。 我可以使用utf8_encode,该字符串将允许使用json_decode对字符串进行解码,但是字符会被压缩成其他形式。这是来自结果数组的print_r的结果。两个字