1 回答

TA貢獻(xiàn)785條經(jīng)驗(yàn) 獲得超332個(gè)贊
這不光是 Java 的概念,我們知道機(jī)器只知道字節(jié),而字符卻是語(yǔ)義上的單位,它是有編碼的,一個(gè)字符可能編碼成1個(gè)2個(gè)甚至3個(gè)4個(gè)字節(jié)。這跟字符集編碼有關(guān)系,英文字母和數(shù)字是單字節(jié),但漢字這些自然語(yǔ)言中的字符是多字節(jié)的。一個(gè)字節(jié)只能表示255個(gè)字符,不可能用于全球那么多種自然語(yǔ)言的處理,因此肯定需要多字節(jié)的存儲(chǔ)方式。
當(dāng)我們?cè)谔幚?Java 時(shí),比如 InputStream, OutputStream 它們是處理字節(jié)流的,就是說假設(shè)所有東西都是二進(jìn)制的字節(jié),而 Reader, Writer 則是字符流,它涉及到字符集的問題,因?yàn)榘岩粋€(gè)字符保存到磁盤或讀取出來需要指定一個(gè)字符集,平時(shí)你的代碼沒有指定是因?yàn)?JVM 讀取操作系統(tǒng)默認(rèn)的字符集,有時(shí)候(特別是數(shù)據(jù)交換的時(shí)候)可能這個(gè)默認(rèn)字符集不正確。
在 Java 中,它的內(nèi)核是使用 Unicode,也就是說它記住了每個(gè)字符的 Unicode 內(nèi)部編碼(一串?dāng)?shù)字,全球唯一,各國(guó)語(yǔ)言常用字符全部在里面,比如康熙字典這種古董中的多數(shù)漢字都在其中),只有把字符串通過網(wǎng)絡(luò)發(fā)送出去或保存到磁盤上或反過來讀取時(shí)才有字符編碼成字節(jié)的過程,因?yàn)橐粋€(gè)字符多個(gè)字節(jié)我們需要知道每個(gè)字符的這幾個(gè)字節(jié)是按什么順序排列的,第1個(gè)字節(jié)排前面還是排后面,多個(gè)字符串在一起時(shí)在讀取時(shí)怎么識(shí)別出哪幾個(gè)字節(jié)湊在一起是一個(gè)字符,這就是字符集編碼方案了,UTF8, GBK, GB2312, GB18030, BIG5,之類的都是其中一種字符集編碼方案。
添加回答
舉報(bào)