在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只是格式上對結果做了一點修改,可能是更方便網絡傳輸使用吧。(以後瞭解更深入再補)