【问题标题】:Encode URL with US-ASCII character set使用 US-ASCII 字符集编码 URL
【发布时间】:2017-02-15 10:25:02
【问题描述】:

我参考以下网站:

http://coderstoolbox.net/string/#!encoding=xml&action=encode&charset=us_ascii

选择“URL”、“编码”和“US-ASCII”,将输入转换为所需的输出。

如何使用 Java 代码产生相同的输出?

提前致谢。

【问题讨论】:

    标签: java encoding character-encoding ascii url-encoding


    【解决方案1】:

    我用过这个,它似乎工作正常。

    public static String encode(String input) {
        Pattern doNotReplace = Pattern.compile("[a-zA-Z0-9]");
        
        return input.chars().mapToObj(c->{
            if(!doNotReplace.matcher(String.valueOf((char)c)).matches()){
                return "%" + (c<256?Integer.toHexString(c):"u"+Integer.toHexString(c));
            }
            return String.valueOf((char)c);
        }).collect(Collectors.joining("")).toUpperCase();
    }
    

    PS:我使用 256 将前缀 U 的位置限制为非 ASCII 字符。 256以内的标准ASCII字符不需要前缀U。


    备选方案:

    有一个内置的 Java 类 (java.net.URLEncoder) 可以进行 URL 编码。但它的工作方式略有不同(例如,它不会用%20 替换空格字符 ,而是用+ 替换。其他字符也会发生类似的情况)。 See if it helps:

    String encoded = URLEncoder.encode(input, "US-ASCII");
    

    希望这会有所帮助!

    【讨论】:

    • 嗨,这两个选项似乎都有效。为什么第二个选项“有点不同”。它似乎产生与第一个选项相同的结果。
    • 网站的输出不完全正确。它应该对 / 字符进行编码,但它没有。
    • 第二个工作方式不同。例如,它不会用%20 替换空格,而是用+ 替换。其他角色也会发生类似的情况。
    【解决方案2】:

    你可以使用ESAPi.encoder().encodeForUrl(linkString)

    查看 encodeForUrl https://en.wikipedia.org/wiki/Percent-encoding 的更多详细信息

    如果不满足您的要求或遇到任何其他问题,请发表评论。

    谢谢

    【讨论】:

    • 嗨,ESAPI 来自哪里?它看起来不像是标准 JDK 的一部分。
    猜你喜欢
    • 2011-06-20
    • 2020-12-21
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多