国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
編碼方式之ASCII、ANSI、Unicode概述

1、ASCII

ASCII全稱(American Standard Code for Information Interchange)美國(guó)信息交換標(biāo)準(zhǔn)代碼,在計(jì)算機(jī)內(nèi)部中8位二進(jìn)制位組成1個(gè)字節(jié)(8(比特)bit=1(字節(jié))byte),而ASCII的編碼方式是把一個(gè)字節(jié)中的低7位用來(lái)編碼,

最高位也就是第8位留著不用(最高位一般為0,但有時(shí)也被用作一些通訊系統(tǒng)的奇偶校驗(yàn)位),從0x00一直編碼到0x7f(0000 0000 到 0111 1111),一共128個(gè)字符

 

2、ANSI

ANSI全稱(American National Standard Institite)美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)(美國(guó)的一個(gè)非營(yíng)利組織),首先ANSI不是指的一種特定的編碼,而是不同地區(qū)擴(kuò)展編碼方式的統(tǒng)稱,各個(gè)國(guó)家和地區(qū)所獨(dú)立制定的兼容ASCII

但互相不兼容的字符編碼,微軟統(tǒng)稱為ANSI編碼

 (GBK是在國(guó)家標(biāo)準(zhǔn)GB2312基礎(chǔ)上進(jìn)行了擴(kuò)容,包含的字符更多)

 

補(bǔ)充:在windows下輸入命令行的黑框下,右鍵再點(diǎn)擊屬性可以看到當(dāng)前的編碼方式和代碼頁(yè)

代碼頁(yè)也稱為“內(nèi)碼表”,是與特定語(yǔ)言的字符集相對(duì)應(yīng)的一張表。操作系統(tǒng)中不同的語(yǔ)言和區(qū)域設(shè)置可能使用不同的代碼頁(yè)(代碼頁(yè)一般與其所直接對(duì)應(yīng)的字符集之間并非完全等同,往往因?yàn)榉N種原因

(比如標(biāo)準(zhǔn)跟不上現(xiàn)實(shí)實(shí)踐的需要)而會(huì)對(duì)字符集有所擴(kuò)展)

 

3、Unicode

Unicode 是一套字符集,而不是一套字符編碼,嚴(yán)格來(lái)說(shuō),字符集字符編碼不是一個(gè)概念:

1、字符集定義了字符和二進(jìn)制的對(duì)應(yīng)關(guān)系,為每個(gè)字符分配了唯一的編號(hào)。可以將字符集理解成一個(gè)很大的表格,它列出了所有字符和二進(jìn)制的對(duì)應(yīng)關(guān)系,計(jì)算機(jī)顯示文字或者存儲(chǔ)文字,就是一個(gè)查表的過(guò)程。

2、而字符編碼規(guī)定了如何將字符的編號(hào)存儲(chǔ)到計(jì)算機(jī)中,如果使用了類似 GB2312 和 GBK 的變長(zhǎng)存儲(chǔ)方案(不同的字符占用的字節(jié)數(shù)不一樣),那么為了區(qū)分一個(gè)字符到底使用了幾個(gè)字節(jié),就不能將字符的編號(hào)

直接存儲(chǔ)到計(jì)算機(jī)中,字符編號(hào)在存儲(chǔ)之前必須要經(jīng)過(guò)轉(zhuǎn)換,在讀取時(shí)還要再逆向轉(zhuǎn)換一次,這套轉(zhuǎn)換方案就叫做字符編碼。

 

有的字符集在制定時(shí)就考慮到了編碼的問(wèn)題,是和編碼結(jié)合在一起的,例如 ASCII、GB2312、GBK、BIG5 等,所以無(wú)論稱作字符集還是字符編碼都無(wú)所謂,也不好區(qū)分兩者的概念。而有的字符集只管制定字符的編號(hào),

至于怎么存儲(chǔ),那是字符編碼的事情,Unicode 就是一個(gè)典型的例子,它只是定義了全球文字的唯一編號(hào),我們還需要 UTF-8、UTF-16、UTF-32 這幾種編碼方案將 Unicode 存儲(chǔ)到計(jì)算機(jī)中。

 (有興趣的讀取可以轉(zhuǎn)到 https://unicode-table.com/cn/ 查看 Unicode 包含的所有字符,以及各個(gè)國(guó)家的字符是如何分布的)

1、UTF-8

編碼方式:

1、如果只有一個(gè)字節(jié),那么最高的比特位為 0,這樣可以兼容 ASCII;

2、如果有多個(gè)字節(jié),那么第一個(gè)字節(jié)從最高位開始,連續(xù)有幾個(gè)比特位的值為 1,就使用幾個(gè)字節(jié)編碼,剩下的字節(jié)均以 10 開頭。

(對(duì)于常用的字符,它的 Unicode 編號(hào)范圍是 0 ~ FFFF,用 1~3 個(gè)字節(jié)足以存儲(chǔ),只有及其罕見,或者只有少數(shù)地區(qū)使用的字符才需要 4~6個(gè)字節(jié)存儲(chǔ))

 

具體的表現(xiàn)形式為:

  • 0xxxxxxx:?jiǎn)巫止?jié)編碼形式,這和 ASCII 編碼完全一樣,因此 UTF-8 是兼容 ASCII 的;
  • 110xxxxx 10xxxxxx:雙字節(jié)編碼形式(第一個(gè)字節(jié)有兩個(gè)連續(xù)的 1);
  • 1110xxxx 10xxxxxx 10xxxxxx:三字節(jié)編碼形式(第一個(gè)字節(jié)有三個(gè)連續(xù)的 1);
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx:四字節(jié)編碼形式(第一個(gè)字節(jié)有四個(gè)連續(xù)的 1)

下面是具體的 Unicode 編號(hào)范圍與對(duì)應(yīng)的 UTF-8 二進(jìn)制格式 

單字節(jié)可編碼的Unicode碼點(diǎn)值范圍十六進(jìn)制為0x0000 ~ 0x007F,十進(jìn)制為0 ~ 127;

雙字節(jié)可編碼的Unicode碼點(diǎn)值范圍十六進(jìn)制為0x0080 ~ 0x07FF,十進(jìn)制為128 ~ 2047;

三字節(jié)可編碼的Unicode碼點(diǎn)值范圍十六進(jìn)制為0x0800 ~ 0xFFFF,十進(jìn)制為2048 ~ 65535;

四字節(jié)可編碼的Unicode碼點(diǎn)值范圍十六進(jìn)制為0x10000 ~ 0x1FFFFF,十進(jìn)制為65536 ~ 2097151

上述的編號(hào)范圍幾個(gè)臨界值(127、2047、65535、2097151)的計(jì)算方式:

對(duì)于單字節(jié)來(lái)說(shuō)除了前綴碼0,有效位數(shù)為7位,(2^7-1=127)

對(duì)于雙字節(jié)來(lái)說(shuō)除了前綴碼110和10,有效位數(shù)為16-5=11位(2^11-1=2047)

剩下的三字節(jié)和四字節(jié)就是24-8=16位(2^16-1=65535)、32-11=21位(2^21-1=2097151)

 

將一個(gè)字符的Unicode編號(hào)確定對(duì)應(yīng)編碼方式并按該編碼方式存儲(chǔ)的步驟如下:

以字母N為例,字母N的 Unicode編號(hào)為78(十進(jìn)制),16進(jìn)制編號(hào)為4E,78屬于0~127這個(gè)范圍,用單字節(jié)編碼(相當(dāng)于ASCII)

 

 

2、 UTF-16

編碼方式:

1、對(duì)于 Unicode 編號(hào)范圍在 0 ~ FFFF 之間的字符,UTF-16 使用兩個(gè)字節(jié)存儲(chǔ),并且直接存儲(chǔ) Unicode 編號(hào),不用進(jìn)行編碼轉(zhuǎn)換,這跟 UTF-32 非常類似。

2、對(duì)于 Unicode 編號(hào)范圍在 10000~10FFFF 之間的字符,UTF-16 使用四個(gè)字節(jié)存儲(chǔ),具體來(lái)說(shuō)就是:將字符編號(hào)的所有比特位分成兩部分,較高的一些比特位用一個(gè)值介于 D800~DBFF 之間的雙字節(jié)存儲(chǔ),

較低的一些比特位(剩下的比特位)用一個(gè)值介于 DC00~DFFF 之間的雙字節(jié)存儲(chǔ)。

 

 

3、UTF-32

編碼方式:

始終占用 4 個(gè)字節(jié),足以容納所有的 Unicode 字符,所以直接存儲(chǔ) Unicode 編號(hào)即可,不需要任何編碼轉(zhuǎn)換。浪費(fèi)了空間,提高了效率。

對(duì)于上面這個(gè)字符來(lái)說(shuō)對(duì)應(yīng)的二進(jìn)制為:0000 0000 1110 0110,經(jīng)過(guò)UTF-32編碼后仍然為0000 0000 1110 0110,只不過(guò)這里需要說(shuō)明的是,轉(zhuǎn)換成二進(jìn)制后計(jì)算機(jī)存儲(chǔ)的問(wèn)題,計(jì)算機(jī)在存儲(chǔ)器中排列字節(jié)有兩種方式:

大端法小端法,大端法就是將高位字節(jié)放到低地址處,比如 0x1234, 計(jì)算機(jī)用兩個(gè)字節(jié)存儲(chǔ),一個(gè)是高位字節(jié) 0x12,一個(gè)是低位字節(jié) 0x34,它的存儲(chǔ)方式為下:

 

(圖片來(lái)源:https://blog.csdn.net/zhusongziye/article/details/84261211)

UTF-32 用四個(gè)字節(jié)表示,處理單元為四個(gè)字節(jié)(一次拿到四個(gè)字節(jié)進(jìn)行處理),如果不分大小端的話,那么就會(huì)出現(xiàn)解讀錯(cuò)誤,比如我們一次要處理四個(gè)字節(jié) 12 34 56 78,這四個(gè)字節(jié)是表示

0x12 34 56 78 還是表示 0x78 56 34 12?不同的解釋最終表示的值不一樣。我們可以根據(jù)他們高低字節(jié)的存儲(chǔ)位置來(lái)判斷他們所代表的含義,所以在編碼方式中有UTF-32BE(big endian) 和 UTF-32LE(littleendian),分別對(duì)應(yīng)大端和小端,來(lái)正確地解釋多個(gè)字節(jié)(這里是四個(gè)字節(jié))的含義。

(Unicode規(guī)范中定義,每一個(gè)文件的最前面分別加入一個(gè)表示編碼順序的字符,這個(gè)字符的名字叫做"零寬度非換行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示,這正好是兩個(gè)字節(jié),而且FF比FE大1,

如果一個(gè)文本文件的頭兩個(gè)字節(jié)是FE FF,就表示該文件采用大端方式;如果頭兩個(gè)字節(jié)是FF FE,就表示該文件采用小端方式)

對(duì)字符編碼感興趣的讀者可以看下笨笨阿林寫的刨根究底字符編碼的系列文章:https://www.cnblogs.com/benbenalin/

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
從編碼的縱橫歷史理解計(jì)算機(jī)編碼,以史鑒理
ASCII、ANSI、UNICODE及UTF-8編碼
ASCII, GB2312, Unicode , UTF-8 - 靈感點(diǎn)滴
windows環(huán)境下unicode編程總結(jié)
關(guān)于字符編碼,你所需要知道的
記事本的編碼問(wèn)題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服