zoukankan      html  css  js  c++  java
  • 判断URL中的中文参数是GB2312还是Utf-8编码

    如两个URL字符串:

    &q=%E8%A3%99%E5%AD%90&style=grid&seller_type=taobao
    &q=%CE%D0%C2%D6%D4%F6%D1%B9&style=list&s=44;

    上面有uft-8编码,下面的用gb2312编码,但是怎么自动识别呢?

    参考csdn论坛讨论,解决方法有两种:

    不管它是utf-8,还是 gbk, 还是....
    先按 iso-8859-1 解码
    然后用正则 匹配一下看是否全文符合 utf-8 规则
    符合的话,认为是 utf-8, 不符合认为是 gbk

    public  String urlDecode(String code) throws Exception{
    		
    		String tem = URLDecoder.decode(code, "iso-8859-1");
    		if (tem.matches("^(?:[\x00-\x7f]|[\xe0-\xef][\x80-\xbf]{2})+$"))
    			return URLDecoder.decode(code, "utf-8");
    		else
    			return URLDecoder.decode(code,"gb2312");
    	}
    

    通用的判断方法:
    假定他就是 GBK 的编码:
    则将其解码成字节码,然后再把字节码编码为GBK,如果转换回来后与没有转换之前是相等的。这样假设成立,也就是GBK编码。
    可以描述成这样:
    字符串 abc 如果是GBK编码的话,经过转换
    abc -> GBK -> byte -> GBK -> abc2
    如果: abc == abc2 说明假设成立,他就是GBK编码,否则不相等。
    代码如下:

    	public  String decode(String code) throws Exception {
    
    		String fis = URLDecoder.decode(code, "gb2312");
    		String sec = new String(fis.getBytes("gb2312"), "gb2312");
    		if (fis.equals(sec))
    			return fis;
    		else {
    			return URLDecoder.decode(code, "utf-8");
    		}
    	}
    

    另外检测字节流是否是UTF8编码

  • 相关阅读:
    启用Netlogon debug,查看服务器验证瓶颈
    Windows Server 2016调整网卡顺序
    AD用户添加到组
    客户端查看/修改所属站点
    OpenCV相关库
    《塔木德》笔记
    《如何阅读一本书》笔记
    《创业维艰》笔记
    《社会心理学》笔记
    《智能商业》笔记
  • 原文地址:https://www.cnblogs.com/sandyfog/p/4736517.html
Copyright © 2011-2022 走看看