天天看點

教妹學Java(十):Unicode字元集簡介

“二哥,上一篇文章中提到了 Unicode 字元集,說 Java 中的

char 類型之是以占 2 個位元組,是因為 Java 使用的是 Unicode 字元集而不是 ASCII 字元集,我有點迷,想了解一下,能細緻給我說說嗎?”

“當然可以啊。”

Unicode 是一種國際通用的标準字元編碼,能夠代表世界上大多數的書面語言。在 Unicode 字元集出現之前,已經存在不少字元集了,比如說:

ASCII,美國标準資訊交換碼,一共規定了 128 個字元的編碼,比如空格 SPACE 是 32(二進制 00100000),大寫的字母 A 是 65(二進制 01000001)。這 128 個符号(包括 32 個不能列印出來的控制符号),隻占用了一個位元組的後面 7 位,最前面的一位統一規定為 0。

ISO 8859-1,為西歐而生。英語用 128 個符号編碼就夠了,但是用來表示其他語言,128 個符号是不夠的。比如,在法語中,字母上方有注音符号,它就無法用 ASCII 碼表示。于是,一些歐洲國家就決定,利用位元組中閑置的最高位編入新的符号。比如,法語中的 é 的編碼為 130(二進制 10000010)。這樣一來,這些歐洲國家使用的編碼體系,可以表示最多 256 個符号。

GB2312,簡體中文編碼方式。使用兩個位元組表示一個漢字,是以理論上最多可以表示 256 x 256 = 65536 個符号,因為漢字就多達 10 萬個左右,一個位元組隻能表示 256 種符号,肯定是不夠的。

它們引出了兩種問題:

一種特定的碼隻能隻能針對一種地區的語言标準。

不同字元集的編碼對應的位元組數不同,有的一個,有的兩個,有的更多,不夠統一。

世界上存在着多種編碼方式,同一個二進制數字可以被解釋成不同的符号。是以,要想打開一個文本檔案,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現亂碼。為什麼電子郵件常常出現亂碼?就是因為發信人和收信人使用的編碼方式不一樣。

如果有一種編碼,将世界上所有的符号都納入其中。每一個符号都給予一個獨一無二的編碼,那麼亂碼問題就會消失。這就是 Unicode,就像它的名字都表示的,這是一種所有符号的編碼。

Unicode 是一個很大的集合,現在的規模可以容納 100 多萬個符号。每個符号的編碼都不一樣,比如,U+0639表示阿拉伯字母 Ain,U+0041 表示英語的大寫字母 A,U+4E25 表示漢字嚴。具體的符号對應表,可以查詢 unicode.org,或者專門的漢字對應表。

Unicode 的一個字元占用 2 個位元組,是以 Java 的 char 類型也占用 2 個位元組。

本篇文章為《教妹學Java》專欄的第十篇文章,是不是有趣得很?我相信你能感受的到,這可是全網獨一份,我看到已經有人在模仿了。現在定價隻需 9.9 元,9.9 元你連一杯奶茶都買不到,但卻能買下二哥精心制作的專欄,據說 CSDN 已經考慮漲價了,畢竟已經賣出一百多份了。

我知道,購買專欄的同學都是沖着二哥的名聲來的,畢竟二哥是 CSDN 的明星部落客,哈哈。為表謝意,我再附送上個人微信(qing_gee),你有什麼問題都可以來咨詢。