|
定義
|
結合java
|
注意
|
|
字符集合
|
一組各類形狀的集合,相似倉頡造的字,沒有實際含義,只是一個有獨一無二的形狀。就像牢房裏面的囚犯,每一個人都是獨一無二的。
|
計算機要顯示文字圖案,對於全部顯示的文字圖案,均可以看作一個字符。
字符集合是基於操做系統的,有個相似字符庫,來保存全部會出現的字符。這裏是指顯示,實際保存仍是一串二進制數。
|
沒啥注意的都是固定的。
|
|
字符集合的
編碼
|
上面的每一個形狀,給他一個惟一標識,一對一的關係,就像每一個囚犯都有惟一的一個編號。
|
有不少規則,規定每一個字符對應什麼數字。咱們熟知的有Assis碼,中國的規則有gb2312 ,統一的是 unicode ,java內部用的是 unicode。例如‘A’,Assis碼中用65表示。
最先只有127個字母被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱爲ASCII編碼。一個字節。
,unicode 通常佔兩個字節。
java 中 定義的char類型字符,就是佔兩個字節。
|
變量在java程序中,咱們定義的基本類型,char 就只用2個字節存儲。
|
|
字符集合的 編碼 的
編碼方案
|
再對上面的惟一標識作一次處理,定義一個規則,每一個數字按照規則,轉換成一個新的標識。每一個監獄勞動改造的規則不同,有的監獄,超過60歲少作點,有的超過70歲少作點
|
要把上面規定好的 字符的編碼 存儲到計算機中,也就是以2進制保存起來,
例如
上面的A字符對應 字符的編碼 65 ,二進制就是 0
100 0001,用8位保存到計算機磁盤中。
我這裏只作了簡單的轉換,實際上,人們制定了不少規則,將 字符的編碼
65 轉換成 1-n個字節保存。
規則有定長的:每一個字符的編碼用統一長度字節保存,好比都用3個字節保存。
不定長的:典型的就是utf-8,用
1-6個字節,英文字母1個字節,漢字3個字節,生僻字4-6個字節。
|
數據持久化,保存到磁盤中,都是字節爲基本單位。
按照編碼方案,將程序中的 字符的編碼 轉換成 可以存儲到本地的 字節數組 這個狀況叫作編碼。
相反 ,咱們從磁盤或者其餘路徑獲得一個字節數組,按照編碼方案,將其轉換成 一個數字,也就是字符的編碼,這個過程叫作解碼。
|
|
步驟
|
1
|
2
|
3
|
4
|
編碼
|
字符,java中顯示
中
|
字符集合的 編碼,
unicode查找 java中實際存儲
230013
|
字符集合的 編碼 的編碼方案 用utf-8
|
java中的方法 :將 字符集合的編碼 一個數值轉化 成一個字節數組
byte[] bytes = String.valueOf(c2).getBytes("utf-8");
{-28,-72,-83}
|
解碼
|
一個字節數組{-28,-72,-83} |
字符集合的 編碼 的編碼方案
用gbk解碼,就是把這個字節數組按照gbk的方式
獲得一個 xxxx 數字(在這裏我不知道)
|
根據xxxx,經過unicode查找 顯示的
|
java中,將 字節數組 轉換 成一個數值String a = new String(bytes,"gbk")
這裏注意我用的是一個 String接受,String 能夠轉化成char[]
這每一個字符其實,在java中就是一個數字,就像230013同樣。
因爲編碼和解碼方式不同 就致使了亂碼
|