3、源碼分析:
更改字符串編碼的步驟爲:
一、調用String的getByte方法對字符串進行解碼,獲得字符串的字節數組(字節數組不攜帶任何有關編碼格式的信息,只有字符纔有編碼格式)
二、根據字節數組和新的字符編碼構造一個新的String對象,獲得的就是按照新的字符編碼生成的字符串java
當咱們從文件中讀數據時,最好使用InputStream方式,而後採用String(byte[] bytes, String encoding)指明文件的編碼方式。不要使用Reader方式,由於Reader方式會自動根據jdk指明的編碼方式把文件內容轉換成unicode編碼。數據庫
當咱們從數據庫中讀文本數據時,採用ResultSet.getBytes()方法取得字節數組,一樣採用帶編碼方式的字符串構造方法便可。數組
ResultSet rs;
bytep[] bytes = rs.getBytes();
String str = new String(bytes, "gb2312");瀏覽器
不要採起下面的步驟。服務器
ResultSet rs;
String str = rs.getString();
str = new String(str.getBytes("iso8859-1"), "gb2312");源碼分析
這種編碼轉換方式效率底。之因此這麼作的緣由是,ResultSet在getString()方法執行時,默認數據庫裏的數據編碼方式爲iso8859-1。系統會把數據依照iso8859-1的編碼方式轉換成unicode。使用str.getBytes("iso8859-1")把數據還原,而後利用new String(bytes, "gb2312")把數據從gb2312轉換成unicode,中間多了好多步驟。編碼
從HttpRequest中讀參數時,利用reqeust.setCharacterEncoding()方法設置編碼方式,讀出的內容就是正確的了。操作系統
順便說句,若是你直接在瀏覽器中的地址欄輸入這個的話,瀏覽器都會使用ISO-8859-1來編碼你的URL,而後才提交到服務器,這也是爲啥通常服務器端都須要首先進行編碼轉換code