Java和JS / AS3之间的URL解码/编码UTF-8有所不同bug !?

问题描述

|| 我遇到了一个问题,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/