【发布时间】: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
我参考以下网站:
http://coderstoolbox.net/string/#!encoding=xml&action=encode&charset=us_ascii
选择“URL”、“编码”和“US-ASCII”,将输入转换为所需的输出。
如何使用 Java 代码产生相同的输出?
提前致谢。
【问题讨论】:
标签: java encoding character-encoding ascii url-encoding
我用过这个,它似乎工作正常。
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 替换空格,而是用+ 替换。其他角色也会发生类似的情况。
你可以使用ESAPi.encoder().encodeForUrl(linkString)
查看 encodeForUrl https://en.wikipedia.org/wiki/Percent-encoding 的更多详细信息
如果不满足您的要求或遇到任何其他问题,请发表评论。
谢谢
【讨论】: