Java和JS/AS3之间的URL解码/编码UTF-8的差异(bug!?)

use*_*437 5 javascript java encoding unicode-escapes

我有一个问题URL解码Java中的UTF-8字符串,用Javascript或Actionscript 3编码.我已经设置了一个测试用例,如下所示:

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

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

escape('Produktgröße')
Run Code Online (Sandbox Code Playgroud)

Produktgr%F6%DFE

当我用JS来解决这个问题时,我没有任何改变

unescape('Produktgr%F6%DFe')
Run Code Online (Sandbox Code Playgroud)

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/>
Run Code Online (Sandbox Code Playgroud)

Produktgr?è

Produktgr%C3%B6%C3%9FE

Produktgr%C3%B6%C3%9FE

Produktgröße

Produktgröße

知道为什么我与这些语言有这种差异,为什么JS/AS3没有像我期望的那样表现?

谢谢.

And*_*y E 10

escape是一个已弃用的函数,并且无法正确编码Unicode字符.使用encodeURI或encodeURIComponent,后者可能是最适合您需求的方法.