摘要:起初這個委員沒有認(rèn)識到我國博大精深的語言文化,認(rèn)為用已經(jīng)足以表示世界上的任何一個字符。所以是一種編碼標(biāo)準(zhǔn),目標(biāo)將世界上的每一個字符用統(tǒng)一二進(jìn)制數(shù)字來表示。編碼期間有一段區(qū)間碼是保留的,保留的范圍是這段字符碼不表示任何字符。
---對unicode編碼和java代碼單元問題研究總結(jié)
前言:最近在《java編程思想》一書中看到了代碼點與代碼單元的概念,當(dāng)中介紹了java采用UTF-16編碼。一個代碼單元(code unit)大小為兩字節(jié)16bit,但是部分字符需要用兩個代碼單元表示,所以對java中可表示字符集統(tǒng)稱為代碼點(code point)。當(dāng)時的認(rèn)識是中文字符要用兩個代碼單元表示,其它字符用一個代碼單元表示。直到在segmentFault上看到一個問答,才發(fā)現(xiàn)自己的理解是錯的,因此抽出對unicode做了一個全面的了解。
本文主要想解釋一下幾個問題:
1、什么是unicode,它和通常所說的UTF是什么關(guān)系 2、字符平面(plan)是什么 3、如何用兩個代碼單元表示一個非基本字符unicode
unicode是一種編碼標(biāo)準(zhǔn),它是為解決早起ISO編碼不兼容問題而提出的。它不僅包括了如何表示一個字符,還有對字符屬性特征的定義?!緢D】在還沒有unicode編碼的時候,每個國家都有自己的一套編碼標(biāo)準(zhǔn),這樣就會發(fā)現(xiàn)在兩個用不同編碼標(biāo)準(zhǔn)實現(xiàn)的計算機(jī)之間傳輸數(shù)據(jù)幾乎是不可能的事情,當(dāng)時也沒有兼容多種語言的計算機(jī)。為了大家交流方便,于是各種標(biāo)準(zhǔn)委員會就成立了,制定出了能夠兼容所有字符的編碼標(biāo)準(zhǔn)--unicode。起初這個委員沒有認(rèn)識到我國博大精深的語言文化,認(rèn)為用16bit(2^16=65536)已經(jīng)足以表示世界上的任何一個字符。但當(dāng)他們看到中國漢語字典的時候為時已晚。于是不得不拓展編碼位數(shù),來兼容這些語言。當(dāng)然現(xiàn)在流通的主流字符還是用一個代碼單元16bit來編碼的。
所以unicode是一種編碼標(biāo)準(zhǔn),目標(biāo)將世界上的每一個字符用統(tǒng)一二進(jìn)制數(shù)字來表示。UTF(Unicode Transformation Format)
那么utf又是什么?Unicode編碼體系分為兩部分:編碼方式和實現(xiàn)方式。編碼方式描述了字符和數(shù)字的對應(yīng)關(guān)系,對應(yīng)的是一個通用的編碼集合(UCS)。例如它用16bit編碼構(gòu)成了基本字符平面,即我們常用的一些字符集合。然后用21bit編碼構(gòu)成了16個輔助字符平面。這種對字符的定義就是編碼方式。
UTF是編碼的實現(xiàn)方式,統(tǒng)一字符集(UCS)就是一張編好的大表,至于如何去實現(xiàn)它,就是UTF統(tǒng)一轉(zhuǎn)換格式的責(zé)任。統(tǒng)一字符集就像一個一個的字母,字母要轉(zhuǎn)換成可以交流的語言。于是有了各種各樣的語言,UTF-8,UTF-16,等等,有的轉(zhuǎn)換格式省空間,有的轉(zhuǎn)換格式容易實現(xiàn)等等。具體用哪一種實現(xiàn)方式完全取決于個人的愛好,但只有兩臺計算機(jī)和軟件采用同一種編碼方式,所得到的結(jié)果才會是相同的。就像有些日本字看起來像漢字卻有著不同的意義。
所以UTF是對統(tǒng)一字符集的編碼實現(xiàn)方式。字符平面
字符平面不用過多詳細(xì)的解釋,委員會對不同的編碼范圍進(jìn)行了劃分,例如0號平面對應(yīng)的編碼范圍是:U+0000~U+FFFF,這又稱為基本字符平面簡稱(BMP)是用一個代碼單元編碼的,也是我們平時最常見的字符集。另外對于超過16bit編碼的字符,委員會定義了16個輔助字符平面。每一個平面都有字符范圍的定義。具體可以參考:https://weiji.ga/zh-hans/Unic...
最后詳細(xì)講將一下UTF-16實現(xiàn)首先看一個比較奇怪的漢子:“?” 它的unicode編碼為 U+23515 它的UTF-16表示為:ud84dudd15。這是如何轉(zhuǎn)換的呢?
再考慮一個問題:“u642du5676u662fu6253u53d1u65afu8482u82ac”這是網(wǎng)絡(luò)上的一串經(jīng)過utf-16編碼的字符串。其中有用一個代碼單元編碼的,有用兩個代碼單元編碼的。瀏覽器或者我們的文本編輯器如何區(qū)分呢?
首先,先說明第二個問題。unicode編碼期間有一段區(qū)間碼是保留的,保留的范圍是0xD800~0xDc00 ,這段字符碼不表示任何字符。瀏覽器或編輯器從左向右解析字符串,如果編碼在這個范圍之外,則證明屬于基本字符平面的字符,之用一個代碼單元表示,在這個范圍之內(nèi)的,則是需要用兩個代碼單元表示的字符。
轉(zhuǎn)化算法: 一起來做個計算題
我們要轉(zhuǎn)換漢字“?”格式的編碼為U+23515,最后結(jié)果應(yīng)該為ud84dudd15
v=0x23515 v"=0x23515-0x10000 = 0x13515 = 0001 0011 0101 0001 0101 vh = 0001001101 // 高十位 vl = 0100010101 // 低十位 w1=0xD800 = 1101 1000 0000 0000 w2=0xDc00 = 1101 1100 0000 0000//保留數(shù)字范圍 w1"= w1|vh = 1101 1000 0100 1101 = 0xd84d w2"= w2|vl = 1101 1101 0001 0101 = 0xdd15
至此我的疑惑解決了,當(dāng)然還有很多問題,希望能和大家一起討論~
參考鏈接:
維基百科 https://zh.wikipedia.org/wiki...
wiki字符平面:https://weiji.ga/zh-hans/Unic...
計算方法 http://tieba.baidu.com/p/3677...
segment提問帖: https://segmentfault.com/q/10...
《java核心技術(shù)》char字符類型一節(jié)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69831.html
摘要:在一個閉包環(huán)境內(nèi)修改變量值,不會影響另一個閉包中的變量。直到看到函數(shù)閉包閉包這篇文章的代碼一部分,終于明白其中的邏輯了。 閉包 閉包定義:指擁有多個變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個函數(shù)),因而這些變量也是該表達(dá)式的一部分。函數(shù)內(nèi)部可以直接讀取全局變量。函數(shù)內(nèi)部變量無法在函數(shù)外部訪問。函數(shù)內(nèi)部聲明要用var或者let聲明,不然會變成全局變量鏈?zhǔn)阶饔糜颍鹤訉ο髸患壖壪蛏蠈ふ?..
摘要:對傳給的進(jìn)行操作。之所以被稱為是因為被繼承了,而不是繼承了。在這種方式中,它們的關(guān)系看上去被反轉(zhuǎn)了。在原則,這叫單一職責(zé)原則。組合的方式是可以保證組件具有充分的復(fù)用性,靈活度,遵守原則的其中一種實踐。 前言 最近在學(xué)習(xí)React的封裝,雖然日常的開發(fā)中也有用到HOC或者Render Props,但從繼承到組合,靜態(tài)構(gòu)建到動態(tài)渲染,都是似懂非懂,索性花時間系統(tǒng)性的整理,如有錯誤,請輕噴~...
摘要:全面移動可能是非常艱巨的,但云允許有選擇的移動。云可用于容災(zāi)削減人員成本。說起云計算,真是最熟悉的陌生人,天天看到它的相關(guān)新聞,卻對它似懂非懂,小編日前在網(wǎng)上看到一組調(diào)查數(shù)據(jù),有90%以上的讀者不知道云計算為何物,不知道云計算的概念,知道云計算能用來干什么就行了。云計算其實就像家里電器一樣。為了能夠使用這些電器,我們家里有沒有必要自備一個發(fā)電機(jī)吧?顯然不需要。只需要把插頭插上,就可以使用電器...
摘要:作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。這天定位于了解能夠簡單讀懂或者使用的人,如果沒有請參照以下網(wǎng)址,學(xué)習(xí)基礎(chǔ)知識。如有錯誤或者建議歡迎斧正。 作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好JavaScript,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。一年以來接觸的JS都是零零散散的,懂或似懂非懂,花點時間好好鞏固下,有興趣的跟...
摘要:常用模式片段之摘要第一次看到這個字眼是在中,即。之后也見到一些別人的代碼里有,它和頁面的有什么關(guān)系,以及和有何淵源。以前都見過這些詞,但都似懂非懂,今天查了些資料收集了些代碼,做個完整的理解。 CSS篇 常用模式片段之CSS布局篇 http://jsorz.cn/blog/2016/08/code-patterns-of-css-layout.html 摘要:position 拉伸性質(zhì)...
閱讀 2264·2021-09-26 09:55
閱讀 3596·2021-09-23 11:22
閱讀 2157·2019-08-30 15:54
閱讀 1907·2019-08-28 18:03
閱讀 2600·2019-08-26 12:22
閱讀 3435·2019-08-26 12:20
閱讀 1732·2019-08-26 11:56
閱讀 2254·2019-08-23 15:30