13、字符集和字符编码
字符集:字符集是多個字符的集合,常見字符集有:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等。
??????? ASCII字符集:是英文大小寫字符、阿拉伯數字和西文符號的一個集合。(可以看一下電腦鍵盤上的鍵,基本就是這些字符)
??????? GB2312字符集:主要包含簡體中文字符。
??????? GB10830字符集:基本包含所有中文字符,包括繁體字、少數民族字等。
??????? Unicode字符集:基本包括全世界所有用到的字符,常用字符集。
?
字符編碼:我理解的字符編碼是指編碼的一種規則,根據對應字符集將字符按著某一規則改編成一組序列。常用的編碼方式有:ASCII編碼、GBK編碼、GB2312編碼、Unicode編碼、UTF-8編碼。最常用的還是utf-8編碼。
?????? ASCII編碼:一個字符占用一個字節。
?????? GBK編碼:和ASCII中相同的字符還是用一個,而其他用兩個字節。
?????? Unicode編碼:全部使用四個字節來存儲
?????? UTF-8編碼:對Unicode做了優化,可以根據不同的符號自動選擇編碼的長短,例如:英文字母一個字節足矣,而漢字就需要三個字節存儲才可以。流行的編碼方式。
?
?????? 將數據存儲在內存中獲取磁盤中時都是以字節形式進行存儲,一個字節占用8位,例如:我現在想要存儲“你是誰”這三個字到記事本,雖然看到的是記事本三個字,但是存儲在磁盤上的卻不是,而是將“我是誰”這三個字看成三個字符,然后根據使用的字符集找到每個字符對應的字節碼,然后根據編碼方式將字節碼編碼成一個序列,最后進行存儲。
可以通過java代碼看到字符對應的在字符集中對應的碼,代碼如下:
public class EncodingAndCharsetTest {public static void main(String[] args) {String s1 = "你是誰";String s2 = "who are you";byte[] bytes = s1.getBytes();//打印結果:-28 -67 -96 -26 -104 -81 -24 -80 -127for (byte b : bytes) {System.out.print(b+" ");}System.out.println();System.out.println("--------------");byte[] bytes2 = s2.getBytes();System.out.println(bytes2.length);//打印結果:119 104 111 32 97 114 101 32 121 111 117for (byte b : bytes2) {System.out.print(b+" ");}} }?????? 之前使用流操作時,有的時候會出現亂碼現象就是因為編碼問題,只要讀和寫用的不是同一套字符集和字符編碼,就可能出現亂碼現象。
總結
以上是生活随笔為你收集整理的13、字符集和字符编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LOL对电脑配置要求(lol对电脑配置的
- 下一篇: 15、java中的集合(2)