5

我在用 Javascript 或 Actionscript 3 编码的 Java 中对 UTF-8 字符串进行 URL 解码时遇到问题。我设置了一个测试用例,如下所示:

有问题的字符串是 Produktgröße

当我使用 JS/AS3 编码时,我得到以下字符串:

escape('Produktgröße')

产品gr%F6%DFe

当我用 JS 取消这个时,我没有任何变化

unescape('Produktgr%F6%DFe')

产品gr%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/>

产品

产品gr%C3%B6%C3%9Fe

产品gr%C3%B6%C3%9Fe

Produktgröße

Produktgröße

知道为什么我与语言存在这种差异以及为什么 JS/AS3 的行为不像我预期的那样吗?

谢谢。

4

3 回答 3

10

escape是一个弃用的函数,不能正确编码 Unicode 字符。使用encodeURIencodeURIComponent,后者可能是最适合您需要的方法。

于 2011-05-25T22:18:12.760 回答
1

Javascript 是使用Latin-1字符集对您的字符串进行 URL 编码。Java 使用UTF-8对其进行 URL 编码。

URL 编码实际上只是替换它无法识别的字符/字节。例如,即使您坚持使用 ASCII 字符,(也会被编码为%28. 当您开始使用非 ASCII 字符(任何超过 7 位的字符)时,您还会遇到字符集的额外问题。

于 2011-05-25T22:16:36.187 回答
1

我一直在努力解决这个问题好几个小时......我的问题是一个 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 上对其进行解码......

解决方案是:

  • 使用 JS 端编码var econded = encodeURIComponent(name);
  • 使用在 Java 端解码它们String decoded = java.net.URLDecoder.decode(econded ,"UTF-8");

一些参考:http: //www.programering.com/a/MjN2ADOwATg.html http://www.theerrormessage.com/2013/10/weird-characters-transmitted-to-and-from-server-through-jquery- ajax调用/

于 2015-12-17T23:01:05.733 回答