java 編碼分析

3、源碼分析:
    更改字符串編碼的步驟爲:
    一、調用String的getByte方法對字符串進行解碼,獲得字符串的字節數組(字節數組不攜帶任何有關編碼格式的信息,只有字符纔有編碼格式)
    二、根據字節數組和新的字符編碼構造一個新的String對象,獲得的就是按照新的字符編碼生成的字符串java

 

【說明】
        java中的String類是按照unicode進行編碼的,當使用String(byte[] bytes, String encoding)構造字符串時,encoding所指的是bytes中的數據是按照那種方式編碼的,而不是最後產生的String是什麼編碼方式,換句話說,是讓系統把bytes中的數據由encoding編碼方式轉換成unicode編碼。若是不指明,bytes的編碼方式將由jdk根據操做系統決定。

        當咱們從文件中讀數據時,最好使用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

相關文章
相關標籤/搜索