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()。
我在使用 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()。