【问题标题】:Convert hex+characters to characters将十六进制+字符转换为字符
【发布时间】:2023-04-03 04:48:01
【问题描述】:

我想将这样一个同时包含十六进制码和普通字符的字符串转换为 Java 中的字符。 示例输入是 \x3e\x3c/style\x3e\x3cscript\x3e\x3c!

输出应该是><style><script><!

【问题讨论】:

    标签: java html dom escaping decode


    【解决方案1】:

    这里有一些东西可以尝试。它不是一个单行,因为 URLDecoder.decode 想要抛出一个异常。

    import java.net.URLDecoder;
    
    public class TestDecode {
    
    
        public void run() throws Exception {
            String test = "\\x3e\\x3c/style\\x3e\\x3cscript\\x3e\\x3c!";
            System.out.printf("%s\n", URLDecoder.decode(test.replaceAll("\\\\x", "%"), "UTF-8"));
        }
    
        public static final void main(String[] args) throws Exception {
            TestDecode td = new TestDecode();
            td.run();
        }
    }
    

    运行时的输出为:

    ></style><script><!
    

    【讨论】:

    • 非常感谢它成功了。唯一剩下的是输入实际上是 \x3e\x3c/style\x3e\x3cscript\x3e\x3c!。不是 \\.因此它不是一个正确的字符串。如何在将其作为输入时添加额外的 \。
    • 如果您从输入中读取该字符串,则不需要添加额外的反斜杠。需要额外的反斜杠来创建字符串常量,因为字符串的 Java 语法需要它。
    【解决方案2】:

    如果字符串是

    x = '\x3e\x3c/style\x3e\x3cscript\x3e\x3c!'
    

    然后使用

    x.decode('string_escape')
    

    【讨论】:

    • 没有字符串是\x3e\x3c/style\x3e\x3cscript\x3e\x3c!并且输出应该是 >
    • 一行输入是 "callbackProxy({"7103/usatoday/high_impact/entertainment/main":{"type":"html","expandable ":false,"html":"\x3chtml\x3e\x3chead\x3e\x3cstyle\x3e\x3c!--\na:link {".这里的\需要在分配给字符串之前用 \\ 和 " 用 \" 替换。
    • 这是一个不同的问题。尝试将输入解析为字段。
    • 在 StackOverflow 上将其作为不同的问题提出,并显示您尝试过但不起作用的代码。
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2013-02-07
    • 2018-01-22
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多