摘要:編碼就是為了解決編碼的問題而生的,它擴(kuò)展自基本多文種平面中,與編碼完全一致,使用兩個(gè)字節(jié)表示到范圍使用個(gè)字節(jié)表示編碼的市場份額和比很小,在頁面中只占。
引言
一直以來總是對(duì) unicode, UTF-8 等編碼知識(shí)懵懵懂懂的,尤其是在做項(xiàng)目過程中只要涉及到幾個(gè)編碼之間的轉(zhuǎn)換,都得到網(wǎng)上搜索一番,根據(jù)別人的經(jīng)驗(yàn)照葫蘆畫瓢,才能解決問題,但是私底下卻完全不懂在做什么。
我再也不愿意重復(fù)這種狀態(tài)了,于是就花了一個(gè)上午的時(shí)間,將這些知識(shí)整理了一遍。如果您覺得我的總結(jié)有疑問或者錯(cuò)誤的地方,歡迎討論交流,批評(píng)指正。
正題之前,先引入我總結(jié)的 Unicode 思維導(dǎo)圖來預(yù)熱下:
要了解 Unicode, 先要從 ASCII 碼說起。
ASCII 碼 什么是 ASCII 碼?ASCII 碼(American Standard Code for Information Interchange)稱為美國標(biāo)準(zhǔn)信息交換碼。它是基于拉丁字母的一套電腦編碼系統(tǒng)。它定義了一個(gè)用于代表常見字符的字典。
ASCII 碼都包含哪些字符?包括 "A-Z"(大小寫都包含),數(shù)據(jù)"0-9" 以及一些常見的符號(hào),要完整查看整個(gè) ASCII 碼對(duì)應(yīng)關(guān)系,可參考這里
ASCII 碼的局限在哪里?ASCII 當(dāng)初只是為美國英語而設(shè)計(jì)的,只能顯示 128 個(gè)編碼,對(duì)其他的語言無能為力。要想顯示其他語言的編碼,還是要使用 unicode。
Unicode 什么是 Unicode ?為了將全世界的文字都統(tǒng)一的記錄下來,并將每個(gè)字符都用唯一的數(shù)字記錄下來,于是就產(chǎn)生了Unicode。
Unicode 也稱為 UCS(Universal Coded Character Set:國際編碼字符集合) 是一個(gè)字符集合,對(duì)世界上大部分的文字系統(tǒng)進(jìn)行了整理,編碼,使電腦可以用更為簡單的方式來呈現(xiàn)和處理文字。最新的版本 Unicode 11.0 已經(jīng)包含了 137439 個(gè)字符。
Unicode 的數(shù)量之多,如果完全涵蓋它, 需要用 4 個(gè)字節(jié)來表示,但是計(jì)算機(jī)存儲(chǔ)過程中卻不是必須都用 4 個(gè)字節(jié)來完成。對(duì)于有些字符,尤其是編碼在前面的字符我們也可以通過 1 個(gè)或 兩個(gè)字節(jié)來節(jié)省空間。這就涉及到了 unicode 的實(shí)現(xiàn)方式。
Unicode 的實(shí)現(xiàn)方式有幾種?Unicode 只是一個(gè)字符集合,每個(gè)字符用一個(gè)數(shù)字來表示,但是這些數(shù)字在計(jì)算機(jī)內(nèi)采用什么方式來存儲(chǔ),是全部都是 4 個(gè)字節(jié),還是 1 到 4 個(gè)字節(jié)不等,這就涉及到了字符編碼的概念。
我們說 Unicode 有幾種實(shí)現(xiàn)方式,也就是在問 Unicode 有幾種編碼方式?
Unicode 常用的編碼方式有 UTF-8, UCS-2, UTF-16 三種,另外還有一種 UTF-32 雖然不太常用也需要提一下。
Unicode 的體系結(jié)構(gòu)是什么樣的?Unicode 既然能夠存儲(chǔ)那么多的字符,肯定是有它的存儲(chǔ)規(guī)則的,如果使用 16 進(jìn)制存儲(chǔ),它的存儲(chǔ)范圍是多少到多少,是否都是直筒式的,從低到高排就可以了?也就是說 Unicode 的體系結(jié)構(gòu)是怎么樣的。
Unicode 當(dāng)前定義其字符的存儲(chǔ)范圍是: 0hex 到 10FFFFhex ,共分為 17 個(gè)區(qū)段,可以存儲(chǔ) 1,114,112 個(gè)字符,這對(duì)當(dāng)前 (137439) 來說遠(yuǎn)遠(yuǎn)足夠了。
其中區(qū)段為 0hex 到 FFFFhex 稱為 基本多文種平面 BMP (Basic Multilingual Plane),在這個(gè)平面中的字符表現(xiàn)形式是 U+ 后面跟 16 進(jìn)制數(shù)。例如 X 字符的 unicode 是 U+0058。
而超出 BMP 范圍的,也就是 10000hex–10FFFFhex 這 16 個(gè)區(qū)段,需要用到 5 到 6 位來表示,如 U+E0001 和 U+10FFFD。
UTF-8 編碼UTF-8 是使用互聯(lián)網(wǎng)上使用最廣泛的 unicode 編碼方式,目前已經(jīng)占有整個(gè)互聯(lián)網(wǎng) 92% 的份額。這里再強(qiáng)調(diào)下 UTF-8 只是 Unicode 的一種實(shí)現(xiàn)方式,UTF-8 是編碼方式,而 Unicode 是字符集合
它是可變長的編碼方式,長度從 1 個(gè)字節(jié)到 4 個(gè)字節(jié)不等。
它能夠完全兼容 ASCII 碼,我們知道 ASCII 碼 是由 128 個(gè)字符組成的,而 Unicode 中的前 128 個(gè)字符和 ASCII 碼都是一一對(duì)應(yīng)的。
UCS-2 編碼UCS-2 只使用了兩個(gè)字節(jié)(16 bit) 來表示字符,也就是說只能表示 65536 個(gè)字符,它只能表示 BMP 中的字符。
當(dāng)前的 unicode 字符數(shù)量已遠(yuǎn)遠(yuǎn)超過了 UCS-2 的數(shù)量,因此 UCS-2 雖然還在被好多軟件使用,但它已經(jīng)過期了。
正因?yàn)?UCS-2 編碼依然被許多軟件使用,為了能夠表示出 BMP 以外的平面內(nèi)的字符,就產(chǎn)生了一種新的編碼 UTF-16 編碼。
UTF-16 編碼UTF-16 就是為了解決 UCS-2 編碼的問題而生的,它擴(kuò)展自 UCS-2
基本多文種平面中,與 UCS-2 編碼完全一致,使用兩個(gè)字節(jié)表示
U+010000 到 U+10FFFF 范圍 使用 4 個(gè)字節(jié)表示
UTF-16 編碼的市場份額和 UTF-8 比很小, 在web 頁面中只占 0.01% 。而且主要在 windows 系統(tǒng)中使用, Unix/Linux 以及 MacOS 中很少使用。
UTF-32 編碼UTF-32 對(duì) Unicode 中的每個(gè)字符都用 4 個(gè)字節(jié)來表示,占用的空間比其他編碼要多的多,也正是這個(gè)原因,人們才用的很少。
小結(jié)既然看到了這里,您一定對(duì) unicode 有了一些認(rèn)識(shí)吧,請(qǐng)?jiān)賮砘仡櫹?Unicode 的思維導(dǎo)圖,加深下理解。
下面來總結(jié)下重點(diǎn):
ASCII 碼只能表示 128 個(gè)字符,只是針對(duì)美國英語而設(shè)計(jì)的, 為了表示其他語言的字符,于是就有了 Unicode
Unicode 只是一個(gè)字符集,里面收集了全世界絕大部分語言的字符。它有多種實(shí)現(xiàn)方式(編碼方式),最常用的就是 UTF-8
UTF-8 編碼是變長字節(jié)的,1 到 4 個(gè)字節(jié)不等,并且它能夠完全兼容 ASCII 碼
參考文檔維基百科 Unicode
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72452.html
摘要:編碼就是為了解決編碼的問題而生的,它擴(kuò)展自基本多文種平面中,與編碼完全一致,使用兩個(gè)字節(jié)表示到范圍使用個(gè)字節(jié)表示編碼的市場份額和比很小,在頁面中只占。 引言 一直以來總是對(duì) unicode, UTF-8 等編碼知識(shí)懵懵懂懂的,尤其是在做項(xiàng)目過程中只要涉及到幾個(gè)編碼之間的轉(zhuǎn)換,都得到網(wǎng)上搜索一番,根據(jù)別人的經(jīng)驗(yàn)照葫蘆畫瓢,才能解決問題,但是私底下卻完全不懂在做什么。 我再也不愿意重復(fù)這種...
摘要:編碼就是為了解決編碼的問題而生的,它擴(kuò)展自基本多文種平面中,與編碼完全一致,使用兩個(gè)字節(jié)表示到范圍使用個(gè)字節(jié)表示編碼的市場份額和比很小,在頁面中只占。 引言 一直以來總是對(duì) unicode, UTF-8 等編碼知識(shí)懵懵懂懂的,尤其是在做項(xiàng)目過程中只要涉及到幾個(gè)編碼之間的轉(zhuǎn)換,都得到網(wǎng)上搜索一番,根據(jù)別人的經(jīng)驗(yàn)照葫蘆畫瓢,才能解決問題,但是私底下卻完全不懂在做什么。 我再也不愿意重復(fù)這種...
閱讀 1218·2021-09-30 09:47
閱讀 3770·2021-09-06 15:02
閱讀 1783·2021-09-01 10:46
閱讀 2367·2019-08-30 15:52
閱讀 601·2019-08-29 15:28
閱讀 1875·2019-08-29 15:08
閱讀 1158·2019-08-29 13:28
閱讀 2582·2019-08-29 12:19