[ 编码 ] URL编码-URL中有中文 怎么办?

2021-08-29  本文已影响0人  一个好汉

URL中有中文 怎么办?

URL编码是对字符进行编码,表示成%xx的形式
URL编码是浏览器发送数据给服务器时使用的编码,它通常附加在URL的参数部分,例如:

https://translate.google.cn/?sl=zh-CN&tl=en&text=摘要&op=translate

这里的"摘要"如果不进行转码是有问题的

之所以需要URL编码,是因为出于兼容性考虑,很多服务器只识别ASCII字符,不转码可能会出现乱码的情况。但如果URL中包含中文、日文这些非ASCII字符怎么办?不要紧,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);
    }
上一篇下一篇

猜你喜欢

热点阅读