unicode and utf-8
今晚聽同事分享提到這個(gè),簡單總結(jié)下。
Unicode字符集
Unicode的出現(xiàn)是因?yàn)锳SCII等其他編碼碼不夠用了,比如ASCII是英語為母語的人發(fā)明的,只要一個(gè)字節(jié)8位就能夠表示26個(gè)英文字母了,但是當(dāng)跨區(qū)域進(jìn)行信息交流的時(shí)候,尤其是Internet的出現(xiàn),除了“A”,“B”,“C",還有“你”,“我”,“他”需要表示,一個(gè)字節(jié)8位顯然不夠用,因此Unicode就被發(fā)明出來,Unicode的最大碼位0x10FFFF,有21位。中文對(duì)應(yīng)的Unicode編碼見http://www.chi2ko.com/tool/CJK.htm
UTF-8字符編碼
Unicode只是給這世界上每個(gè)字符規(guī)定了一個(gè)統(tǒng)一的二進(jìn)制編號(hào),并沒有規(guī)定程序該如何去存儲(chǔ)和解析。
可以說UTF-8是Unicode實(shí)現(xiàn)方式之一,它的規(guī)則如下: 1)對(duì)于單字節(jié)的符號(hào),字節(jié)的第一位設(shè)為0,后面7位為這個(gè)符號(hào)的unicode碼。因此對(duì)于英語字母,UTF-8編碼和ASCII碼是相同的。 2)對(duì)于n字節(jié)的符號(hào)(n>1),第一個(gè)字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進(jìn)制位,全部為這個(gè)符號(hào)的unicode碼。
| Unicode編碼(十六進(jìn)制) | UTF-8 字節(jié)流(二進(jìn)制) |
| 000000 - 00007F | 0xxxxxxx |
| 000080 - 0007FF | 110xxxxx 10xxxxxx |
| 000800 - 00FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
| 010000 - 10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
可以看到最多一共有21個(gè)x,所以剛好能夠表示Unicode的最大的碼位。
大端(BE)和小端(LE)
考慮4個(gè)字節(jié)的16進(jìn)制表示ox12345678,計(jì)算機(jī)都是以字節(jié)為單位存儲(chǔ)數(shù)據(jù)的,因此內(nèi)存地址空間從低到高被挖成一個(gè)個(gè)“坑”,一個(gè)蘿卜一個(gè)坑,那么相鄰的蘿卜之間自然就有順序的問題。文字說明太抽象,直接看圖理解。
大端跟我們平時(shí)的書寫習(xí)慣一致,比較好理解,記住大端就可以了,我們平時(shí)說的網(wǎng)絡(luò)字節(jié)順序也是指大端,至于小端就讓它見鬼去吧。
實(shí)在要文字說明理解的話,可以這么來:大端可以認(rèn)為是“高位在尾端”(大->高),“高位”指的是我們書寫時(shí)的高位,比如1024,個(gè)十百千,1是高位,“尾端”指的是內(nèi)存空間中低地址一端,所以1存儲(chǔ)在低地址空間,只不過計(jì)算機(jī)是以一個(gè)字節(jié)為單位的。反之小端就是“低位在尾端”(小->低)了。
BOM
BOM(Byte Order Mark)是用來區(qū)分字節(jié)序列和編碼方式的(UTF-8,UTF-16,UTF-32)。就是讓編輯器或程序讀到前面幾個(gè)字節(jié)就知道后面該以哪種編碼方式來解析,8/16/32是指以多少位作為編碼單位的,依次就是1/2/4個(gè)字節(jié),因?yàn)閁TF-8是以單個(gè)字節(jié)作為編碼單位的所以其實(shí)沒有必要指定它的字節(jié)序列,所以UTF-8有BOM和無BOM的兩種。
| UTF編碼 | Byte Order Mark (BOM) |
| UTF-8 without BOM | 無 |
| UTF-8 with BOM | EF BB BF |
| UTF-16LE | FF FE |
| UTF-16BE | FE FF |
| UTF-32LE | FF FE 00 00 |
| UTF-32BE | 00 00 FE FF |
?
延伸閱讀
Unicode字符平面映射:
http://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC%A6%E5%B9%B3%E9%9D%A2%E6%98%A0%E5%B0%84#.E5.9F.BA.E6.9C.AC.E5.A4.9A.E6.96.87.E7.A7.8D.E5.B9.B3.E9.9D.A2
轉(zhuǎn)載于:https://www.cnblogs.com/yelongsan/p/4115299.html
總結(jié)
以上是生活随笔為你收集整理的unicode and utf-8的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编串指令的使用
- 下一篇: 【C语言笔记初级篇】第一章:C语言快速入