百科對(duì)于unicode編碼的解釋是醬紫的:
Unicode(統(tǒng)一碼、萬國碼、單一碼)是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界標(biāo)準(zhǔn),包括字符集、編碼方案等。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。
看來unicode只是一種標(biāo)準(zhǔn),用多個(gè)字節(jié)來編碼字符。unicode設(shè)定了字符編碼表,像ASCII字符表,和計(jì)算機(jī)怎么實(shí)現(xiàn)的一些方案(如BOM)。傳統(tǒng)的ASCII編碼只能表示127個(gè)字符,對(duì)于拉丁文是足夠的,但 世界還有很多其他的文字,比如博大精深的中文漢字。unicode旨在統(tǒng)一表示世界的字符。unicode只是一種編碼格式規(guī)范,在計(jì)算機(jī)底層根據(jù)unicode字符編碼規(guī)范,實(shí)現(xiàn)了的字符編碼有utf8,utf16,utf32,gbk,latin1等。接下來談?wù)剈tf8編碼。
utf8編碼又稱萬國碼,用1到4個(gè)字節(jié)來存儲(chǔ)字符(中文在unicode中用2個(gè)字符來編碼(4e00~65bf),utf8用3個(gè)字節(jié)來存儲(chǔ))。utf8編碼的過程是醬紫的:
1 以單字節(jié)進(jìn)行編碼
2如果字符是單字節(jié)字符,像拉丁文,則‘0’開頭,后面就是該字符在unicode編碼表中的第二個(gè)字節(jié)的低7位
3多字節(jié)字符(如n位),首字節(jié)的前n為為1,n+1位為0,后面剩余的字節(jié)以10開頭,未提到的位按該字符在unicode編碼表中的編碼填充。
例如,英文的字母A',在unicode中的編碼為:0000 0000 0110 0101,utf8中的存儲(chǔ)為:0110 0101,比unicode編碼節(jié)約了一個(gè)字節(jié)。中文的‘胡‘字在unicode中的編碼為:U80e1(1000 0000 1110 0001),那么用utf8存儲(chǔ)時(shí)就是醬紫的:1110 1000 10 000011 10 100001.比unicode多了一個(gè)字節(jié)。
utf8是以單字節(jié),按特定格式進(jìn)行編碼的,在磁盤中存儲(chǔ)時(shí)不存在字節(jié)序問題(BOM),也就是utf8是字節(jié)序無關(guān)的,添不添加bom都一樣。但unicode允許utf8添加bom,unicode規(guī)定utf8的bom開頭為:EF BB BF。