有個朋友說在百度上提交的數據進行編碼后不是我說的那樣,我試了一下,找到原因如下
關于URLEncoder的解析問題
在http://rabbit8.blogchina.com/blog/article_144619.789425.html后,有個朋友留言,說在百度試驗的結果和我文章中說的不一致,我做了個實驗,證實JDK的幫助沒錯,原因如下:
我的試驗代碼如下: public static void main(String[] args) { URLEncoder urle = null; //得到默認:%A8%B9 System.out.println("默認:" + 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來查看"ü"的ASCII的話,得到的結果如圖:  可見,UltraEdit使用的是操作系統默認的編碼方式(實際上,MS采用的也不是GBK,而是另一種編碼,但效果和GBK差不多),所以它顯示的ASCII的編碼為A8 B9,就是第一和第二種情況的結果。而第三種情況才是JDK幫助中所聲明的情況。 我查看了百度,提交了一下,結果和我預期的是一樣的!

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