utf8與unicode,ascii碼有什么區(qū)別和關(guān)系
????ASCII與Unicode都是是一種字符集,Unicode兼容了ASCII的字符集,它定義了每個(gè)字符的唯一編號(hào),而UTF-8是一種編碼方式,它將Unicode中的字符編碼成字節(jié)序列以便存儲(chǔ)和傳輸。
具體來(lái)說(shuō),Unicode定義了每個(gè)字符的唯一編號(hào),而UTF-8則使用1到4個(gè)字節(jié)來(lái)表示這些編號(hào)。UTF-8編碼方式可以在不同的平臺(tái)和系統(tǒng)之間共享,并且可以在傳輸過(guò)程中自動(dòng)檢測(cè)和糾正錯(cuò)誤。
Unicode,全稱為Unicode標(biāo)準(zhǔn)(The Unicode Standard),其官方機(jī)構(gòu)Unicode聯(lián)盟所用的中文名稱為統(tǒng)一碼[1],又譯作萬(wàn)國(guó)碼、統(tǒng)一字元碼、統(tǒng)一字符編碼[2],是信息技術(shù)領(lǐng)域的業(yè)界標(biāo)準(zhǔn),其整理、編碼了世界上大部分的文字系統(tǒng),使得電腦能以通用劃一的字符集來(lái)處理和顯示文字,不但減輕在不同編碼系統(tǒng)間切換和轉(zhuǎn)換的困擾,更提供了一種跨平臺(tái)的亂碼問(wèn)題解決方案。
Unicode伴隨著通用字符集ISO/IEC 10646的標(biāo)準(zhǔn)而發(fā)展,同時(shí)也以書(shū)本的形式[3]對(duì)外發(fā)表。Unicode至今仍在不斷增修,每個(gè)新版本都加入更多新的字符。目前最新的版本為2022年9月公布的15.0.0[4],已經(jīng)收錄超過(guò)14萬(wàn)個(gè)字符(第十萬(wàn)個(gè)字符在2005年獲采納)。
Unicode最普遍的編碼格式是和ASCII兼容的UTF-8,以及和UCS-2兼容的UTF-16。
具體舉例:
例如ASCII 中的??A?:
對(duì)應(yīng)10進(jìn)制:和二進(jìn)制
65
01000001
如果unicode放數(shù)據(jù)就是這樣的:
00000000 00000000 00000000 01000001
那么其中4個(gè)字節(jié),只有1個(gè)字節(jié)有有效內(nèi)容,另外三個(gè)字節(jié)被白白浪費(fèi)了。因此utf-8的編碼方式就可以很好的節(jié)約空間:
utf8編碼規(guī)則:

對(duì)于UTF-8編碼中的任意字節(jié)B,如果B的第一位為0,則B獨(dú)立的表示一個(gè)字符(ASCII碼);
如果B的第一位為1,第二位為0,則B為一個(gè)多字節(jié)字符中的一個(gè)字節(jié)(非ASCII字符);
如果B的前兩位為1,第三位為0,則B為兩個(gè)字節(jié)表示的字符中的第一個(gè)字節(jié);
如果B的前三位為1,第四位為0,則B為三個(gè)字節(jié)表示的字符中的第一個(gè)字節(jié);
如果B的前四位為1,第五位為0,則B為四個(gè)字節(jié)表示的字符中的第一個(gè)字節(jié);
舉例我們?cè)趃olang中打印 我 字對(duì)應(yīng)的 unicode 和 utf8編碼后的樣子:

其中utf8就是用3個(gè)字節(jié),按照 高位 1110開(kāi)頭,后面兩個(gè)字節(jié) 按照10開(kāi)頭存儲(chǔ)的unicode中的“我”字符對(duì)應(yīng)的utf8編碼;
那么看到這里 大家理解了嗎?