我遇到了一个问题,即使用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
有什么想法吗? :)
答案 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()。