是否有一个类可以按照RFC 3986规范对通用的String
进行编码?
即: "hello world"
=> "hello%20world"
,而不是(RFC 1738):"hello+world"
谢谢。
encodeUri
方法。URI uri = new URI("http", "//hello world", null);
String urlString = uri.toASCIIString();
System.out.println(urlString);
来源:Twitter RFC3986 兼容的编码函数。
该方法接受字符串并将其转换为 RFC3986 特定的编码字符串。
/** The encoding used to represent characters as bytes. */
public static final String ENCODING = "UTF-8";
public static String percentEncode(String s) {
if (s == null) {
return "";
}
try {
return URLEncoder.encode(s, ENCODING)
// OAuth encodes some characters differently:
.replace("+", "%20").replace("*", "%2A")
.replace("%7E", "~");
// This could be done faster with more hand-crafted code.
} catch (UnsupportedEncodingException wow) {
throw new RuntimeException(wow.getMessage(), wow);
}
}
a3=2+q
的参数,因为它将字符串编码为 a3=2%2Bq
而不是 a3=2%20q
,因为 URLEncoder
在替换之前对字符串进行了编码。 - Roman VottnerUriComponentsBuilder.newInstance()
.queryParam("KEY1", "Wally's crazy empôrium=")
.queryParam("KEY2", "Horibble % sign in value")
.build().encode("UTF-8") // or .encode() defaults to UTF-8
返回字符串
?KEY1=Wally's%20crazy%20emp%C3%B4rium%3D&KEY2=Horibble%20%25%20sign%20in%20value
对我最喜欢的网站之一进行交叉检查,结果相同,“URI的百分比编码”。看起来不错。http://rishida.net/tools/conversion/
我不知道是否有这样一个类。有一个提供编码的类,但它将“ ”转换为“+”。但您可以使用String类中的replaceAll方法将“+”转换为您想要的内容。
str.repaceAll("+","%20")