java編碼與解碼(一)
轉:https://blog.csdn.net/heyanxi0101/article/details/80356870
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”);