成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

似懂非懂unicode

pingink / 3041人閱讀

摘要:起初這個委員沒有認(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

相關(guān)文章

  • 前端學(xué)習(xí)筆記之閉包——看了一張圖終于明白啥是閉包了

    摘要:在一個閉包環(huán)境內(nèi)修改變量值,不會影響另一個閉包中的變量。直到看到函數(shù)閉包閉包這篇文章的代碼一部分,終于明白其中的邏輯了。 閉包 閉包定義:指擁有多個變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個函數(shù)),因而這些變量也是該表達(dá)式的一部分。函數(shù)內(nèi)部可以直接讀取全局變量。函數(shù)內(nèi)部變量無法在函數(shù)外部訪問。函數(shù)內(nèi)部聲明要用var或者let聲明,不然會變成全局變量鏈?zhǔn)阶饔糜颍鹤訉ο髸患壖壪蛏蠈ふ?..

    andycall 評論0 收藏0
  • React-代碼復(fù)用(mixin.hoc.render props)

    摘要:對傳給的進(jìn)行操作。之所以被稱為是因為被繼承了,而不是繼承了。在這種方式中,它們的關(guān)系看上去被反轉(zhuǎn)了。在原則,這叫單一職責(zé)原則。組合的方式是可以保證組件具有充分的復(fù)用性,靈活度,遵守原則的其中一種實踐。 前言 最近在學(xué)習(xí)React的封裝,雖然日常的開發(fā)中也有用到HOC或者Render Props,但從繼承到組合,靜態(tài)構(gòu)建到動態(tài)渲染,都是似懂非懂,索性花時間系統(tǒng)性的整理,如有錯誤,請輕噴~...

    wfc_666 評論0 收藏0
  • 清清楚楚告訴你,云計算有哪些應(yīng)用

    摘要:全面移動可能是非常艱巨的,但云允許有選擇的移動。云可用于容災(zāi)削減人員成本。說起云計算,真是最熟悉的陌生人,天天看到它的相關(guān)新聞,卻對它似懂非懂,小編日前在網(wǎng)上看到一組調(diào)查數(shù)據(jù),有90%以上的讀者不知道云計算為何物,不知道云計算的概念,知道云計算能用來干什么就行了。云計算其實就像家里電器一樣。為了能夠使用這些電器,我們家里有沒有必要自備一個發(fā)電機(jī)吧?顯然不需要。只需要把插頭插上,就可以使用電器...

    thursday 評論0 收藏0
  • 給自己定個小目標(biāo)比如14天入門JavaScript

    摘要:作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。這天定位于了解能夠簡單讀懂或者使用的人,如果沒有請參照以下網(wǎng)址,學(xué)習(xí)基礎(chǔ)知識。如有錯誤或者建議歡迎斧正。 作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好JavaScript,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。一年以來接觸的JS都是零零散散的,懂或似懂非懂,花點時間好好鞏固下,有興趣的跟...

    Near_Li 評論0 收藏0
  • JS / CSS 常用實戰(zhàn)代碼片段

    摘要:常用模式片段之摘要第一次看到這個字眼是在中,即。之后也見到一些別人的代碼里有,它和頁面的有什么關(guān)系,以及和有何淵源。以前都見過這些詞,但都似懂非懂,今天查了些資料收集了些代碼,做個完整的理解。 CSS篇 常用模式片段之CSS布局篇 http://jsorz.cn/blog/2016/08/code-patterns-of-css-layout.html 摘要:position 拉伸性質(zhì)...

    sutaking 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<