天天看點

java中的編碼與解碼

編碼表概述和常見的編碼表

概述:有字元及其對應的數值組成的一張表
           

常見的編碼表

ASCII:美國标準資訊交換表
ISO8859-1:拉丁碼表,歐洲碼表
GB2312:中國的中文編碼表
GBK:中國的中文編碼表更新
GB18030:GBK的取代版本
BIG5:通用于香港、台灣地區的繁體字編碼方案
UTF-8:最多用3個子節表示一個字元
Unicode:國際标準碼,融合了多種文字,所有的文字都用兩個子節來表示,Java語言使用的就是該碼表
           

    編碼過程:把看得懂的變成看不懂的

    解碼過程:把看不懂的變成看得懂的

在我們Java中定義了一個String,其編碼方式是啥?

    字元串實際上就是一個char數組。那麼Char的編碼,其實就是字元串的編碼。那麼Char是什麼編碼呢?Java中的String預設使用的是Unicode編碼。

    Unicode是一中編碼,所謂的編碼就是一個編号到字元的一種映射關系,就僅僅是一對一的映射關系而已。

編碼和編碼格式的差別是什麼?

    1.Unicode 是一種編碼,所謂的編碼就是一個編号(數字)到字元的一種映射關系,就僅僅是一種一對一的映射關系而已。

    2. GBK、UTF-8是一種編碼格式,是用來序列化或存儲上述的(編号或者數字)的一種“格式”.

    編碼和編碼格式:*java的String使用的編碼的Unicode,當String存在于記憶體中的時候,是“隻有編碼沒有編碼格式的”,是以java程式中的任何String對象,說它是GBK或者UTF-8都是錯的。String在記憶體中是不存在編碼格式*的,它隻是一個Unicode的一個字元而已。

    當字元串需要在網絡中傳輸或者要被寫入檔案的是時候,就需要編碼格式了。亂碼的問題也是以出現了。

    GBK 和 UTF-8:GBK 和 UTF-8 都是用來序列化或存儲 Unicode 編碼的資料的,但是分别是2中不同的格式,他們都是 Unicode 的實作方式。

    ASCII碼 和 Unicode:ASCII 和 Unicode一樣也是一種編碼,隻不過這兩種編碼能編碼的範圍不同,Unicode 能編碼的範圍要更大一些,幾乎能覆寫現存的所有字元。

Java中一些編解碼的常見使用

    1.流讀取檔案,具有轉換編碼功能的有:OutputStreamWriter 和 InputStreamReader

構造器如下:

// 建立指定字元集的 InputStreamReader
InputStreamReader(InputStream in, String CharsetName)
// 建立使用指定字元集的 OutputStreamWriter
OutputStreamWriter(OutputStream out, String CharsetName)
           

    2.處理字元串編碼問題

//a. 重新對擷取的字元串進行編碼
Byte[] bytes = str.getBytes(String encodeCharName);

//b. 重新對bytes進行編碼,建立新的字元串對象
str = new String(Byte[] bytes, String decodeCharsetName);

// 一般結合使用
str = new String(str.getBytes(String encodeName), String decodeCharsetName);
           

    3.處理請求參數傳遞編碼問題

        java中編碼:URLEncoder.encode(strUri, “UTF-8”);

        java中解碼:URLDecoder.decode(strUri, “UTF-8”);