使用URLDecoder对URL进行中文解析

        在编写java程序时我们在处理form表单提交过来的action参数时看到浏览器url地址栏get请求提交的中文用户名如:

%E5%B0%8F

像“乱码”的样子。其实这里并不是“乱码”而是处理后的16进制数。

页面中的URL地址是给请求行、请求头传值的,而请求行与请求头是属于http协议规定的ISO8859-1编码,
ISO8859-1编码是只支持英文的,对于3个字节的中文是无法识别的,但此时就会可能会想到处理成二进制去传输数据
但是一个中文字符的话是占3个字节,换算成二进制就是3*8=24位,那这么长的数据放入url中显然不符合url阅读,
那么此时用16进制的话是更合理的。如此的话一个字节00000000这8位就装换为两个0000~FFFF,
那么中文字符占3字节,换成16进制就可以用6个0000~FFFF表示一个中文字符啦。
而这时就会想了,url参数信息被编译成ISO8859-1格式的16进制数据了,那么此时如何转回中文字符串呢,
url将数据识别十六进制用“%”号来,%号后接两个16进制,一般中文字符前两个字符是%E开头
转成中文字符串有以下难点:
     1、怎么判断数据是二进制还是16进制呢
                答:%xx%xx%xx为一个字符,x对应的是一个十六进制
     2、如果我将数据写成16进制的数据那么会不会背被我解析成中文数据
                答:不会的ISO8859-1编码的url是不会识别特殊符号%?+=等等的,会做十六进制处理
     3、在URL中数据是如何识别16进制
                答:以三个%%%为一个中文字符,进行解析
URLDecoder使用:
        答:我们直接用URLDecoder.decode(字符串,“指定编码格式”)。返回的是字符串

如下示例代码如下所示:

        String str = URLDecoder.decode("%E5%B0%8F%E9%B8%A1","utf-8");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值