判斷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編碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM