带有特殊字符的Java中的javascript unescape()

时间:2016-01-28 21:22:52

标签: javascript java decode encode

我遇到了一个问题,即使用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中的所有方法都不能解码字符串。

这样做的代码与escape()方法结合在一起,因为它写得很长。如果不投入大量的工作,我就无法改变它,所以如果我能避免它,我想。

唯一可行的方法,但这是一个性能影响:

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

有什么想法吗? :)

1 个答案:

答案 0 :(得分:2)

问题是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()。