问题描述
||
我遇到了一个问题,URL解码了用Javascript或Actionscript 3编码的Java中的UTF-8字符串。我已经建立了一个测试用例,如下所示:
有问题的字符串是Produktgröße
当我用JS / AS3编码时,得到以下字符串:
escape(\'Produktgröße\')
产品%F6%DFe
当我用JS取消转义时,我没有任何改变
unescape(\'Produktgr%F6%DFe\')
产品%F6%DFe
因此,据此我假设JS无法正确编码字符串?
以下JSP产生了此异常
<%@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/>
产品
产品%C3%B6%C3%9Fe
产品%C3%B6%C3%9Fe
产品展示
产品展示
知道为什么我与语言存在这种差异以及为什么JS / AS3表现不如我预期吗?
谢谢。
解决方法
转义是不建议使用的函数,不能正确编码Unicode字符。使用encodeURI或encodeURIComponent,后者可能是最适合您需要的方法。
,Javascript是使用Latin-1字符集对URL编码的字符串。 Java是使用UTF-8对其进行URL编码的。
URL编码实际上只是替换了无法识别的字符/字节。例如,即使您坚持使用ASCII字符,“ 3”也会被编码为“ 4”。当您开始使用非ASCII字符(任何长度超过7位的字符)时,还会遇到字符集的问题。
,数小时来,我一直在努力解决这个问题。
我的问题是像这样的JQuery Ajax调用:
return $.ajax({
url: \'/author!getAuthorContent.action\',type: \'GET\',data : {author:name,\'content_type\': ct || \'all\',\'start\': start || 0}
});
\'name \'是一个字符串,其中包含特殊字符,例如Jérôme-Serrano
由于某些原因,JS / JQuery编码这些特殊字符的方式不兼容,我无法在Java BackEnd上对其进行解码...
解决方案是:
使用ѭ6在JS端编码
使用ѭ7在Java端对其进行解码
一些意见:
http://www.programering.com/a/MjN2ADOwATg.html
http://www.theerrormessage.com/2013/10/weird-characters-transmitted-to-and-from-server-through-jquery-ajax-call/