??博客主頁:?小扳_-CSDN博客
?感謝大家點(diǎn)贊??收藏?評論??
?
文章目錄
???????1.0 字符集的說明
? ? ? ? 1.1 ASCII? 字符集
? ? ? ? 1.2?GBK 字符集
? ? ? ? 1.3?UTF-8字符集
? ? ? ? 2.0 字符集的編碼與解碼
? ? ? ? 2.1 編碼提供了常見的方法
? ? ? ? 2.2 解碼提供了常見的方法
???????1.0 字符集的說明
????????字符集是一組字符的集合,字符集包括所有可用的字符,包括字母、數(shù)字、標(biāo)點(diǎn)符號、特殊字符和控制字符等。常見的字符集有 ASCII 字符集、UTF-8 字符集、 GBK 字符集等。
? ? ? ? 1.1 ASCII? 字符集
????????它由128個字符組成,包括大寫和小寫字母、數(shù)字、標(biāo)點(diǎn)符號、特殊字符和控制字符等。ASCII 字符集使用7位二進(jìn)制數(shù)表示每個字符,范圍從0到127。
????????只用一個字節(jié)大小的容量來“裝”下這些每一個英文、數(shù)字、符號,需要注意的是首位必須為0。
? ? ? ? 1.2?GBK 字符集
? ? ? ??GBK 字符集廣泛用于中文環(huán)境下的計算機(jī)系統(tǒng)和軟件,包括操作系統(tǒng)、文字處理軟件、網(wǎng)頁等。GBK 字符集是一種中文字符集,是在? ASCII? 字符集基礎(chǔ)上或者兼容的前提下,進(jìn)行擴(kuò)展的。
????????需要重點(diǎn)了解的是,每一個英文和數(shù)字、字符都是可以用一個字節(jié)大小的容量來“裝”下,首位必須為0,對于中文漢字來說,需要每一個字符需要兩個字節(jié)大小的容量來“裝”下這超過21000個漢字和符號,包括繁體字、生僻字和部分其他語種的字符。需要重點(diǎn)注意的是,首位必須為1。
? ? ? ? 1.3?UTF-8字符集
? ? ? ? UTF-8 字符集是一種全球通用的字符編碼標(biāo)準(zhǔn),它包含了幾乎所有已知的字符,涵蓋了世界上所有的語言和符號。UTF-8 字符集的目標(biāo)是為每個字符提供一個唯一的編碼,以便在不同的計算機(jī)系統(tǒng)和軟件中進(jìn)行字符的交換和處理。
????????UTF-8是一種變長編碼方案,使用1到4個字節(jié)來表示不同的字符,適用于在互聯(lián)網(wǎng)上傳輸和存儲文本數(shù)據(jù)。每個中文的漢字、字符等占三個字節(jié),每個英文、數(shù)字、符號等占一個字節(jié),在編碼或者解碼為了區(qū)分這些字符不混淆,就會有一定的規(guī)則。占一個字節(jié)的,首位必須為0;占兩個字節(jié)的,第一個字節(jié)首位三個必須為110,第二個字節(jié)的首位兩個必須為10;占三個字節(jié)的,首位四個必須為1110,第二個字節(jié)首位兩個為10,第三個字節(jié)首位兩個也為10;占四個字節(jié)的,首位五個必須為11110,第二個字節(jié)首位兩個為10,第三個字節(jié)首位兩個也為10,第四個字節(jié)首位兩個也為10。
? ? ? ? 小結(jié)一下:
? ? ? ? 2.0 字符集的編碼與解碼
????????字符集的編碼和解碼是將字符轉(zhuǎn)換為對應(yīng)的編碼值,或?qū)⒕幋a值轉(zhuǎn)換為對應(yīng)的字符的過程。簡單地來說,編碼就是將字符轉(zhuǎn)變?yōu)榫幪?/span>,這里的編號就是字符集中對應(yīng)的編碼值,而解碼就是逆過程,將編號轉(zhuǎn)變?yōu)樽址?/span>。
? ? ? ? 2.1 編碼提供了常見的方法
? ? ? ? 使用 getBytes() :默認(rèn)系統(tǒng)提供的編碼集。
? ? ? ? 使用?getBytes( String? charsetName) :選擇自己想要的編碼集。
代碼如下:
import java.util.Arrays; public class characterSet { public static void main(String[] args) throws Exception{ //編碼 String name = new String("a我b"); //默認(rèn)系統(tǒng)的提供的字符集進(jìn)行編碼 byte[] num = name.getBytes(); System.out.println(Arrays.toString(num)); //自選的字符集進(jìn)行編碼 byte[] num1 = name.getBytes("GBK"); System.out.println(Arrays.toString(num1)); } }
運(yùn)行結(jié)果如下:
? ? ? ? 2.2 解碼提供了常見的方法
? ? ? ? 就是用字符串類的構(gòu)造器,將字節(jié)數(shù)組放到有參構(gòu)造器中,就可以得到了相應(yīng)的字符串了。
? ? ? ? 使用:String pass = new String( byte bytes[]),默認(rèn)系統(tǒng)提供的編碼集。
? ? ? ? 使用:String pass = new String( byte bytes[],?String charsetName),自選編碼集。
代碼如下:
import java.util.Arrays; public class characterSet { public static void main(String[] args) throws Exception{ //編碼 String name = new String("a我b"); //默認(rèn)系統(tǒng)的提供的字符集進(jìn)行編碼 byte[] num = name.getBytes(); System.out.println(Arrays.toString(num)); //自選的字符集進(jìn)行編碼 byte[] num1 = name.getBytes("GBK"); System.out.println(Arrays.toString(num1)); //解碼 //用系統(tǒng)提供的默認(rèn)字符集 String pass = new String(num); System.out.println(pass); //自己選用想要的字符集 String pass1 = new String(num1,"GBk"); System.out.println(pass1); } }
運(yùn)行結(jié)果如下:
? ? ? ? 需要重點(diǎn)注意的是,使用了某一套字符集進(jìn)行編碼,那么必須要使用跟編碼使用的相同的一套字符集進(jìn)行解碼。
代碼如下:
import java.io.UnsupportedEncodingException; public class characterSet { public static void main(String[] args) throws UnsupportedEncodingException { String name = "李四"; //這里使用了 UTF-8 這一套字符集進(jìn)行編碼 byte[] passName = name.getBytes(); //如果使用 GBK 這一套字符集進(jìn)行解碼的時候會很很大問題 String newName = new String(passName,"GBK"); System.out.println(newName); } }
運(yùn)行結(jié)果:
? ? ? ? 這里就出現(xiàn)了我不認(rèn)識的字了,總之,編碼與解碼都要使用同一套字符集,不然會出現(xiàn)問題。?文章來源:http://www.zghlxwxcb.cn/news/detail-736600.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-736600.html
到了這里,關(guān)于高階JAVA篇-深入了解字符集的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!