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

javascript unescape() in Java with special characters

本文关键字:特殊字符 Java unescape javascript      更新时间:2023-09-26

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

Chrome 控制台:

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

爪哇端:

(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 中没有一个方法可以解码字符串。

这将要执行的代码与 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");

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

编辑2:这是另一个相关的问题。简而言之,不要使用 escape()。