[Java基础]一个我使用的URL解码方法,支持使用IE指定UTF8和GBK

本文介绍了一种从URL中获取参数并进行编码转换的方法,包括如何根据不同的输入编码(如GBK或UTF-8)正确解析请求中的关键词,并通过两步转换确保关键词能够被正确解读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        // url中获取参数
        // inputEncoding
        String inputEncoding = "GBK";
        String ie = request.getParameter("ie");
        if (StringUtil.equalsIgnoreCase("UTF-8", ie) || StringUtil.equalsIgnoreCase("UTF8", ie)) {
            inputEncoding = ie;
        }
        // keywords(设置tomcat容器的URIEncoding="ISO-8859-1")
        // 首先从request获取请求中的关键词,此时keywords3的值可能为:
        // (1)如果请求中的关键词是"手机"的GBK原生字节码"[0xCA][0xD6][0xBB][0xFA]":那么此时keywords3 = 乱码
        // (2)如果请求中的关键词是"手机"的GBK URLEncoding后的编码"%CA%D6%BB%FA":那么此时keywords3 = %CA%D6%BB%FA
        // (3)如果请求中的关键词是"手机"的UTF8原生字节码"[0xE6][0x89][0x8B][0xE6][0x9C][0xBA]":那么此时keywords3 = 乱码
        // (4)如果请求中的关键词是"手机"的UTF8 URLEncoding后的编码"%E6%89%8B%E6%9C%BA":那么此时keywords3 = %E6%89%8B%E6%9C%BA
        String keywords3 = request.getParameter("keywords");
        if (StringUtil.isNotBlank(keywords3)) {
            String keywords2 = null;
            try {
                // 然后按照inputEncoding转换keywords3为keywords2,keywords2的值可能为:
                // (1)如果keywords3 = 乱码:那么此时keywords2 = 手机
                // (2)如果keywords3 = %CA%D6%BB%FA:那么此时keywords2 = %CA%D6%BB%FA
                // (3)如果keywords3 = %E6%89%8B%E6%9C%BA:那么此时keywords2 = %E6%89%8B%E6%9C%BA
                keywords2 = new String(keywords3.getBytes("ISO-8859-1"), inputEncoding);// “中文”或"%C6%A1%BE%C6"
            } catch (UnsupportedEncodingException e1) {
                keywords2 = keywords3;
            }
            // 然后按照inputEncoding转换keywords2为keywords,keywords的值可能为:
            // (1)如果keywords2 = 手机:那么此时keywords = 手机
            // (2)如果keywords2 = %CA%D6%BB%FA:那么此时keywords = 手机
            // (3)如果keywords2 = %E6%89%8B%E6%9C%BA:那么此时keywords = 手机
            String keywords = UrlEncodeUtil.decode(keywords2, inputEncoding);// “中文”
            // 只保留keywords的前40个字符
            if (keywords.length() > 40) {
                keywords = keywords.substring(0, 40);
            }
            param.setKeywords(keywords);
            param.setGbkKeywords(UrlEncodeUtil.encode(keywords, "GBK"));
        }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值