(1)IO前置內(nèi)容:字符集
1.字符集基礎(chǔ)知識(shí):
- 計(jì)算機(jī)底層不可以直接存儲(chǔ)字符,只能存儲(chǔ)二進(jìn)制(0,1)。
- 二進(jìn)制可以轉(zhuǎn)換成十進(jìn)制。
- 計(jì)算機(jī)底層可以表示十進(jìn)制編號(hào)。計(jì)算機(jī)可給人類(lèi)字符進(jìn)行編號(hào)存儲(chǔ),這套編號(hào)規(guī)則就是字符集。
2.ASCII字符集:(1字節(jié))
- ASCII(American Standard Code for Information Interchange,美國(guó)信息交換標(biāo)準(zhǔn)代碼):包括了數(shù)字,英文,符號(hào)。
- ASCII使用1個(gè)字節(jié)存儲(chǔ)一個(gè)字符,一個(gè)字節(jié)是8位,總共可以表示128個(gè)字符信息,對(duì)于英文,數(shù)字來(lái)說(shuō)是夠用的。
3.GBK:(2字節(jié))
- window系統(tǒng)默認(rèn)的碼表,兼容ASCII碼表,也包含了幾萬(wàn)個(gè)漢字,并支持繁體漢字以及部分日韓文字。
- 注意:GBK是中國(guó)的碼表,一個(gè)中文以及兩個(gè)字節(jié)的形式存儲(chǔ)。但不包含世界上所有國(guó)家文字。
4.Unicode碼表:(UTF-8:3字節(jié))
- unicode(又稱統(tǒng)一碼,萬(wàn)國(guó)碼,單一碼)是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界字符編碼標(biāo)準(zhǔn)。
- 容納世界上大多數(shù)國(guó)家的所有常見(jiàn)文字和字符。
- 由于Unicode會(huì)通過(guò)UTF-8,UTF-16,以及UTF-32的編碼成二進(jìn)制后再存儲(chǔ)到計(jì)算機(jī),其中最為常見(jiàn)的就是UTF-8。
- 漢字存儲(chǔ)/展示原理:存儲(chǔ):首先將漢字通過(guò)Unicode表查詢,找到在碼表中對(duì)應(yīng)的數(shù)字通過(guò)UTF-8編碼轉(zhuǎn)換成二進(jìn)制存儲(chǔ)到計(jì)算機(jī)。展示:讀取二進(jìn)制,UTF-8解碼,通過(guò)碼表中對(duì)應(yīng)的數(shù)字,到Unicode碼表中查詢,再展示。
- 注意:
- Unicode是萬(wàn)國(guó)碼,以UTF-8編碼后一個(gè)中文一般以三個(gè)字節(jié)的形式存儲(chǔ)。
- UTF-8也要兼容ASCII編碼表。
- 技術(shù)人員都應(yīng)該使用UTF-8的字符集編碼。
- 編碼前和編碼后的字符集需要一致,否則會(huì)出現(xiàn)中文亂碼。
5. String編碼
方法名稱 | 說(shuō)明 |
byte[] getBytes() | 使用平臺(tái)的默認(rèn)字符集將該String編碼為一系列字節(jié),將結(jié)果存儲(chǔ)到新的字節(jié)數(shù)組中。 |
byte[] getBytes(String charsetName) | 使用指定的字符集將該String編碼為一系列字節(jié),將結(jié)果存儲(chǔ)到新的字節(jié)數(shù)組中。 |
6.String解碼文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-416792.html
構(gòu)造器 | 說(shuō)明 |
String(byte[] bytes) | 通過(guò)使用平臺(tái)的默認(rèn)字符集解碼指定的字節(jié)數(shù)組來(lái)構(gòu)造新的String. |
String(byte[] bytes,String charsetName) | 通過(guò)指定的字符集解碼指定的字節(jié)數(shù)組來(lái)構(gòu)造新的String |
7.String編碼解碼代碼實(shí)現(xiàn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-416792.html
import java.util.Arrays;
/**
* 編碼,解碼
*/
public class Test01 {
public static void main(String[] args) throws Exception {
//1.編碼:把文字轉(zhuǎn)換成字節(jié)
String name = "abc認(rèn)真學(xué)習(xí)";
// byte[] bytes = name.getBytes();//默認(rèn)字符集編碼 UTF-8
byte[] bytes = name.getBytes("GBK");//指定字符集編碼 GBK
System.out.println(Arrays.toString(bytes));
//2.解碼:字節(jié)轉(zhuǎn)換成對(duì)應(yīng)中文(注意:編碼前和編碼后的字符集必須一致)
// String rs = new String(bytes);//默認(rèn) UTF-8
String rs = new String(bytes,"GBK");//指定 GBK
System.out.println(rs);
}
}
到了這里,關(guān)于Java基礎(chǔ)——IO流之字符集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!