有個(gè)朋友說(shuō)在百度上提交的數(shù)據(jù)進(jìn)行編碼后不是我說(shuō)的那樣,我試了一下,找到原因如下
關(guān)于URLEncoder的解析問(wèn)題
在http://rabbit8.blogchina.com/blog/article_144619.789425.html后,有個(gè)朋友留言,說(shuō)在百度試驗(yàn)的結(jié)果和我文章中說(shuō)的不一致,我做了個(gè)實(shí)驗(yàn),證實(shí)JDK的幫助沒(méi)錯(cuò),原因如下:
我的試驗(yàn)代碼如下: public static void main(String[] args) { URLEncoder urle = null; //得到默認(rèn):%A8%B9 System.out.println("默認(rèn):" + urle.encode("ü")); try { //得到GBK:%A8%B9 System.out.println("GBK:" + urle.encode("ü", "GBK")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try { //得到UTF-8:%C3%BC System.out.println("UTF-8:" + urle.encode("ü", "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } 如果用UltraEdit來(lái)查看"ü"的ASCII的話,得到的結(jié)果如圖:  可見(jiàn),UltraEdit使用的是操作系統(tǒng)默認(rèn)的編碼方式(實(shí)際上,MS采用的也不是GBK,而是另一種編碼,但效果和GBK差不多),所以它顯示的ASCII的編碼為A8 B9,就是第一和第二種情況的結(jié)果。而第三種情況才是JDK幫助中所聲明的情況。 我查看了百度,提交了一下,結(jié)果和我預(yù)期的是一樣的!

如果你查看頁(yè)面的源文件,會(huì)看到百度的charset為gb2312,而幫助中明確提到例子使用的是UTF-8編碼,所以出現(xiàn)了不一致的問(wèn)題,也正是因?yàn)檫@個(gè)原因,所以JDK中決定要廢棄public static String encode(String s)方法,因?yàn)檫@個(gè)方法的編碼的字符集依賴(lài)于程序運(yùn)行的系統(tǒng)的默認(rèn)的字符集! 兔八哥 2005-2-15 17:41
|