美文网首页
[ 编码 ] URL编码-URL中有中文 怎么办?

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

作者: 一个好汉 | 来源:发表于2021-08-29 17:57 被阅读0次

    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);
        }
    

    相关文章

      网友评论

          本文标题:[ 编码 ] URL编码-URL中有中文 怎么办?

          本文链接:https://www.haomeiwen.com/subject/ksgbiltx.html