gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:59:40 29 4
gpt4 key购买 nike

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

有什么想法吗? :)

最佳答案

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

关于Java 中的 javascript unescape() 带有特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072293/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com