javascript 在 Java 中使用特殊字符的 unescape()

javascript unescape() in Java with special characters

我在使用 Javascript escape() 方法编码的 Java 中无法转义特殊字符时遇到问题。

Chrome 控制台:

escape( "Gaëtan" )
"Ga%EBtan"

Java 边:

(new org.apache.commons.codec.net.URLCodec()).decode("Ga%EBtan", "UTF-8")
 Ga�tan
java.net.URLDecoder.decode( "Ga%EBtan", "UTF-8" )
 Ga�tan
org.apache.commons.lang3.StringEscapeUtils中的

None方法也可以解码字符串。

此代码已与 escape() 方法结合,因为它编写了很长时间。如果不投入大量工作,我无法改变它,所以如果我能避免它,我想。

唯一有效的方法,但这是一个性能问题:

( new javax.script.ScriptEngineManager() ).getEngineByName("JavaScript").eval( "unescape('Ga%EBtan')" )
Gaëtan

有什么想法吗? :)

问题是escape()没有用UTF-8编码,也就是说%EB编码的字节不是UTF-8字符ë。

在这种情况下,您需要使用 Windows-1252 对其进行解码:

new URLCodec().decode("Ga%EBtan", "Windows-1252");

编辑:this question 中的答案建议在 javascript 中使用 encodeURI 和 encodeURIComponent,因为 escape() 的编码似乎是可变的。这两个总是以 UTF-8 编码。

编辑 2:Here's another related question. 简而言之,不要使用 escape()。