URL中有中文 怎么办?
URL编码是对字符进行编码,表示成%xx的形式
URL编码是浏览器发送数据给服务器时使用的编码,它通常附加在URL的参数部分,例如:
https://translate.google.cn/?sl=zh-CN&tl=en&text=摘要&op=translate
这里的"摘要"如果不进行转码是有问题的
之所以需要URL编码,是因为出于兼容性考虑,很多服务器只识别ASCII字符,不转码可能会出现乱码的情况。但如果URL中包含中文、日文这些非ASCII字符怎么办?不要紧,URL编码有一套规则:
- 字符是A~Z,a~z,0~9以及-、_、.、*,则保持不变;
- 是其他字符,先转换为UTF-8编码,然后对每个字节以%XX表示。
例如:字符中的UTF-8编码是0xe4b8ad,因此,它的URL编码是%E4%B8%AD。URL编码总是大写。
编码
public static void encode(String urlParam) {
log.info("urlParam: {}", urlParam);
try {
log.info("java.net.URLEncoder : {}", java.net.URLEncoder.encode(urlParam, "UTF8"));
} catch (UnsupportedEncodingException e) {
log.error("请检查URL设置编码", e);
}
log.info("cn.hutool.core.net.URLEncoder : {}", cn.hutool.core.net.URLEncoder.createAll().encode(urlParam, StandardCharsets.UTF_8));
}
// 测试
@Test
void encode() {
UrlCoding.encode("摘要");
UrlCoding.encode("韩国尊称");
}
摘要 结果是 %E6%91%98%E8%A6%81
韩国尊称 结果是 %E9%9F%A9%E5%9B%BD%E5%B0%8A%E7%A7%B0
解码
public static void decode(String urlParam) {
log.info("urlParam: {}", urlParam);
try {
log.info("java.net.URLDecoder.decode(urlParam, \"UTF8\"): {}", java.net.URLDecoder.decode(urlParam, "UTF8"));
} catch (UnsupportedEncodingException e) {
log.error("请检查URL设置编码", e);
}
log.info("cn.hutool.core.net.URLDecoder.decode(urlParam, StandardCharsets.UTF_8): {}", cn.hutool.core.net.URLDecoder.decode(urlParam, StandardCharsets.UTF_8));
}
// 测试
@Test
void decode() {
String urlParam = "%E6%91%98%E8%A6%81"; // 摘要
UrlCoding.decode(urlParam);
urlParam = "%E9%9F%A9%E5%9B%BD%E5%B0%8A%E7%A7%B0"; // 韩国尊称
UrlCoding.decode(urlParam);
}
网友评论