我有一个问题URL解码Java中的UTF-8字符串,该字符串使用Javascript或Actionscript 3进行编码。我已按如下方式设置测试用例:
有问题的字符串是Produktgröße
当我用JS / AS3编码时,我得到以下字符串:
escape('Produktgröße')
Produktgr%F6%DFE
当我用JS解决这个问题时,我没有改变
unescape('Produktgr%F6%DFe')
Produktgr%F6%DFE
因此,我假设JS没有正确编码字符串??
以下JSP生成此outupt
<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URLDecoder"%>
<%=(URLDecoder.decode("Produktgr%F6%DFe","UTF-8"))%><br/>
<%=(URLEncoder.encode("Produktgröße","UTF-8"))%><br/>
<%=(URLEncoder.encode("Produktgröße"))%><br/>
<%=(URLDecoder.decode(URLEncoder.encode("Produktgröße")))%><br/>
<%=(URLDecoder.decode(URLEncoder.encode("Produktgröße"),"UTF-8"))%><br/>
Produktgr的ΔE
Produktgr%C3%B6%C3%9FE
Produktgr%C3%B6%C3%9FE
Produktgröße
Produktgröße
知道为什么我与语言存在这种差异以及为什么JS / AS3没有按照我的预期行事?
感谢。
答案 0 :(得分:10)
escape 是一个已弃用的函数,无法正确编码Unicode字符。使用encodeURI或encodeURIComponent,后者可能是最适合您需求的方法。
答案 1 :(得分:1)
Javascript是使用Latin-1字符集对您的字符串进行编码的URL。 Java是使用UTF-8对其进行URL编码。
URL编码实际上只是替换它无法识别的字符/字节。例如,即使您坚持使用ASCII字符,(
也会被编码为%28
。当您开始使用非ASCII字符(长度超过7位的任何东西)时,您还有其他字符集问题。
答案 2 :(得分:1)
我几个小时一直在努力解决这个问题...... 我的问题是JQuery Ajax调用,如:
<img ng-click="getDocsForCategory(benefit)" ng-src="/ppt/assets/toolIcons/{{benefit.img}}" height="165"><br/>
'name'是一个包含特殊字符的字符串,如Jérôme-Serrano
由于某些原因,JS / JQuery编码这些特殊字符的方式是不兼容的,我无法在Java BackEnd上解码它...
解决方案是:
return $.ajax({
url: '/author!getAuthorContent.action',
type: 'GET',
data : {author:name, 'content_type': ct || 'all', 'start': start || 0}
});
var econded = encodeURIComponent(name);