淺談unicode

Unicode provides a unique number for every character, no matter what the platform, program, or language is.

????????摘自Unicode官方描述诲祸。大意是:Unicode為任意一個符號提供唯一的數(shù)字寇损,可以是平臺、程序新博、語言出現(xiàn)的任意符號售淡。

1、unicode解決什么問題?

????????從根本上說,計算機只處理數(shù)字宵喂。它們通過為每個字符分配一個編號(數(shù)字)來存儲字母和其他字符。在開發(fā)Unicode標準之前柱衔,有許多不同的系統(tǒng)樊破,稱為字符編碼愉棱,用于分配該系統(tǒng)編號唆铐,如ASCII、ISO-8859-1奔滑、GBK等艾岂。這些早期的字符編碼是有局限性的,并沒有涵蓋所有世界語言的字符朋其。即使對于像英語這樣的單一語言王浴,也沒有單一的編碼涵蓋了常用的所有字母脆炎,標點符號和技術符號。諸如中日韓語之類的象形語言是支持這些早期編碼標準的挑戰(zhàn)氓辣;早期的字符編碼也相互沖突秒裕。也就是說,兩個編碼可以對兩個不同的字符使用相同的編號钞啸,或者對同一個字符使用不同的編號几蜻。任何給定的計算機可能必須支持許多不同的編碼。但是体斩,當在計算機和不同編碼之間傳遞數(shù)據(jù)時梭稚,會增加數(shù)據(jù)損壞或錯誤的風險。unicode旨在涵蓋所有字符絮吵,并為其提供唯一編號弧烤。

2、字符集結構說明

????????字符集只是一個規(guī)則集合的名字蹬敲,對應到真實生活中暇昂,字符集就是對某種語言的稱呼。例如:英語粱栖,漢語话浇,日語。對于一個字符集來說(尤其是unicode)要正確編碼轉(zhuǎn)碼一個字符需要三個關鍵元素:

字庫表(character repertoire): 一個相當于所有可讀或者可顯示字符的數(shù)據(jù)庫闹究,字庫表決定了整個字符集能夠展現(xiàn)表示的所有字符的范圍幔崖。

編碼字符集(coded character set): 即用一個編碼值code point來表示一個字符在字庫中的位置,也就是我們前面說到的編號渣淤。unicode的編碼方式與 ISO 10646 的UCS-2相對應赏寇。給每個字符分配一個代碼,而且賦予了一個正式的名字价认。表示一個UCS或Unicode值的十六進制數(shù)通常在前面加上“U+”嗅定,例如“U+0041”代表字符“A”。

字符編碼(character encoding form): 將編碼字符集和實際存儲數(shù)值之間的轉(zhuǎn)換關系用踩,一般來說都會直接將code point的值作為編碼后的值直接存儲渠退。

或許你跟我一樣有過這樣的疑問:字庫表和編碼字符集看來是必不可少的,那既然字庫表中的每一個字符都有一個自己的編號脐彩,直接把編號作為存儲內(nèi)容就好了碎乃。為什么還要多此一舉通過字符編碼把編號轉(zhuǎn)換成另外一種存儲格式呢?

統(tǒng)一字庫表的目的是為了能夠涵蓋世界上所有的字符惠奸,但實際使用過程中會發(fā)現(xiàn)真正用的上的字符相對整個字庫表來說比例非常低梅誓。比如說在使用英語的國家,你可以認為只用ASCII字庫表就能基本滿足基本需求,在存儲上只需要一個字節(jié)即可梗掰;但一些如中文是需要2到3個字節(jié)存儲的嵌言。如果簡單進行編號存儲,那么必須要使用最大字節(jié)長度進行存儲及穗。這樣會造成極大的存儲浪費摧茴。


結構圖


3、utf-8 與 unicode

????????utf-8的全稱:8-bit Unicode Transformation Format埂陆,從名字上解釋utf-8和Unicode的關系就比較簡單了蓬蝶。Unicode就是上文中提到的編碼字符集,而utf-8就是字符編碼猜惋,即Unicode規(guī)則字庫的一種實現(xiàn)方式丸氛;從結構體系上理解,utf-8只是實現(xiàn)方式的其中一個著摔,其他類似如:utf-16缓窜、utf-32等等

4、ASCII碼和unicode

????????ASCII碼作為早期字符集的存在谍咆,使用面是非常廣泛的禾锤,在字符集結構里,ASCII字符集的編碼字符集和字符編碼是一樣的摹察。unicode在字符收集時恩掷,保留了ASCII碼的編碼字符集(字符和編號的關系)。所以很多時候我們提到的ASCII碼只是一個字典表供嚎,不代表我們使用ASCII字符集黄娘。

5、BMP與supplementary characters

? ? ? ? unicode的編碼方式既然是用utf-16克滴,那么所能表示的范圍是 U+0000 到 U+FFFF 之間逼争,unicode定義了Basic Multilingual Plane (BMP)用于表示這個范圍,更多的Plane定義可以查閱unciode官網(wǎng)劝赔。code point 大于 U+FFFF的字符被稱為supplementary characters誓焦。?supplementary characters是由一對字符組成:?high-surrogates?range, (\uD800-\uDBFF) 和?low-surrogates?range (\uDC00-\uDFFF)。BMP其實已經(jīng)囊括了大部分常用的字符着帽,所以我們其實很少用得到?supplementary characters杂伟。當然了,也用使用場景的仍翰,比如部分中文生僻字赫粥,emoji不屬于BMP部分,你甚至可以在Java歉备,Javascript里獲取這類字符串的長度傅是,會得到意想不到的結果匪燕,有興趣的可以嘗試:"??".length()

結束

unicode是一個世界性課題蕾羊,ta會囊括很多信息喧笔,不太可能一兩篇文章就能說清楚,本文旨在簡單了解在工作中能接觸的部分龟再。謝謝您的閱讀书闸,如有疑問請給我留言,謝謝利凑。

參考:

https://unicode.org/charts/

https://zh.wikipedia.org/zh-hans/Unicode

https://zh.wikipedia.org/zh-hans/UCS

https://linux.cn/article-5027-1.html

https://linux.cn/article-3500-1-rel.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浆劲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哀澈,更是在濱河造成了極大的恐慌牌借,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件割按,死亡現(xiàn)場離奇詭異膨报,居然都是意外死亡,警方通過查閱死者的電腦和手機适荣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門现柠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弛矛,你說我怎么就攤上這事够吩。” “怎么了丈氓?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵周循,是天一觀的道長。 經(jīng)常有香客問我万俗,道長鱼鼓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任该编,我火速辦了婚禮迄本,結果婚禮上,老公的妹妹穿的比我還像新娘课竣。我一直安慰自己嘉赎,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布于樟。 她就那樣靜靜地躺著公条,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迂曲。 梳的紋絲不亂的頭發(fā)上靶橱,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音,去河邊找鬼关霸。 笑死传黄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的队寇。 我是一名探鬼主播膘掰,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼佳遣!你這毒婦竟也來了识埋?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤零渐,失蹤者是張志新(化名)和其女友劉穎窒舟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诵盼,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡辜纲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拦耐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耕腾。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杀糯,靈堂內(nèi)的尸體忽然破棺而出扫俺,到底是詐尸還是另有隱情,我是刑警寧澤固翰,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布狼纬,位于F島的核電站,受9級特大地震影響骂际,放射性物質(zhì)發(fā)生泄漏疗琉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一歉铝、第九天 我趴在偏房一處隱蔽的房頂上張望盈简。 院中可真熱鬧,春花似錦太示、人聲如沸柠贤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臼勉。三九已至,卻和暖如春餐弱,著一層夾襖步出監(jiān)牢的瞬間宴霸,已是汗流浹背囱晴。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓢谢,地道東北人畸写。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像恩闻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剧董,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容