URLEncoder.encode和getBytes的區別

在Web開發中遇到中文編碼問題總是令人頭疼,更可怕的是又遇到了似乎很相似似乎又不同,傻傻分不清的URLEncoder.encode和getbytes方法,我試圖去解釋清二者的區別。

舉慄,現在有一箇中文詞“中國”,我們分別用這兩種方法進行解碼,還原成一串數字。由於utf-8的漢字佔三個字節,所以理論應該得到兩個三字節的數字,共六個字節。

一、getBytes()

bytes[] name = "中國".getBytes("utf-8");
for (int i = 0;i < name.length;i++){
    System.out.print(name[i]);
}

結果:-28-72-83-27-101-67 

二、URLEncoder.encode()

String name = URLEncoder.encode("中國","utf-8");

結果:%E4%B8%AD%E5%9B%BD 

 仔細分析一下發現,getBytes返回的是byte數組,符合預期,把“中國”還原成了數組。URLEncoder.encode返回的是String,不符合預期,爲什麼String的中國解碼後還是String,而且是看不懂的神祕代碼?更關鍵的是兩者結果似乎不同?

其實再仔細看一下會發現E4正好是-28的十六進制形式,兩者只是進制不同!結果其實是一樣的!所以說URLEncoder.encode只是格式上對結果做了一點修改,可能是更方便網絡傳輸使用吧。(以後瞭解更深入再補)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章