手機(jī)開發(fā)實(shí)戰(zhàn)44——手機(jī)字符編碼介紹2

編碼

UTF-8:

采用變長字節(jié)(1 ASCII, 2希臘字母, 3漢字, 4平面符號(hào))表示。在網(wǎng)絡(luò)傳輸時(shí),即使錯(cuò)了一個(gè)字節(jié),不影響其他字節(jié),而雙字節(jié)只要一個(gè)錯(cuò)了,其他也錯(cuò)了,具體如下:

如果只有一個(gè)字節(jié)則其最高二進(jìn)制位為0;如果是多字節(jié),其第一個(gè)字節(jié)從最高位開始,連續(xù)的二進(jìn)制位值為1的個(gè)數(shù)決定了其編碼的字節(jié)數(shù),其余各字節(jié)均以10開頭。UTF-8最多可用到6個(gè)字節(jié)。

UTF-16:

采用2字節(jié),Unicode中不同部分的字符都同樣基于現(xiàn)有的標(biāo)準(zhǔn)。這是為了便于轉(zhuǎn)換。

從0×0000到0×007F是ASCII字符,

從0×0080到0×00FF是ISO-8859-1對(duì)ASCII的擴(kuò)展。

希臘字母表使用從0×0370到0×03FF的代碼,

斯拉夫語使用從0×0400到0×04FF的代碼,

美國使用從0×0530到0×058F的代碼,

希伯來語使用從0×0590到0×05FF的代碼。

中國、日本和韓國的象形文字(總稱為CJK)占用了從0×3000到0×9FFF的代碼;由于0×00在c語言及操作系統(tǒng)文件名等中有特殊意義,故很多情況下需要UTF-8編碼保存文本,去掉這個(gè)0×00。舉例如下:

UTF-16: 0×0080 ?= 0000 0000 1000 0000

UTF-8: ? 0xC280 = 1100 0010 1000 0000

UTF-32:采用4字節(jié)。

優(yōu)缺點(diǎn)

UTF-8、UTF-16和UTF-32都可以表示有效編碼空間(U+000000-U+10FFFF)內(nèi)的所有Unicode字符。

使用UTF-8編碼時(shí)ASCII字符只占1個(gè)字節(jié),存儲(chǔ)效率比較高,適用于拉丁字符較多的場(chǎng)合以節(jié)省空間。

對(duì)于大多數(shù)非拉丁字符(如中文和日文)來說,UTF-16所需存儲(chǔ)空間最小,每個(gè)字符只占2個(gè)字節(jié)。

Windows NT內(nèi)核是Unicode(UTF-16),采用UTF-16編碼在調(diào)用系統(tǒng)API時(shí)無需轉(zhuǎn)換,處理速度也比較快。

采用UTF-16和UTF-32會(huì)有Big Endian和Little Endian之分,而UTF-8則沒有字節(jié)順序問題,所以UTF-8適合傳輸和通信。

UTF-32采用4字節(jié)編碼,一方面處理速度比較快,但另一方面也浪費(fèi)了大量空間,影響傳輸速度,因而很少使用。

如何判斷字符集

1字節(jié)序

首先說一下字節(jié)序?qū)幋a的影響,字節(jié)序分為Big Endian字節(jié)序和Little Endian字節(jié)序。不同的處理器可能不一樣。所以,傳輸時(shí)需要告訴處理器當(dāng)時(shí)的編碼字節(jié)序。對(duì)于前者而言,高位字節(jié)存在低地址,低字節(jié)存于高地址;后者相反。例如,0X03AB,

Big Endian字節(jié)序

0000: 0 3

0001: AB

Little Endian字節(jié)序是

0000: AB

0001: 0 3

2編碼識(shí)別

UNICODE,根據(jù)前幾個(gè)字節(jié)可以判斷UNICODE字符集的各種編碼,叫做Byte Order Mask方法BOM:

UTF-8: EFBBBF (符合UTF-8格式,請(qǐng)看上面。但沒有含義在UCS即UNICODE中)

UTF-16 Big Endian:FEFF (沒有含義在UCS-2中)

UTF-16 Little Endian:FFFE (沒有含義在UCS-2中)

UTF-32 Big Endian:0000FEFF (沒有含義在UCS-4中)

UTF-32 Little Endian:FFFE0000 (沒有含義在UCS-4中)

GB2312:高字節(jié)和低字節(jié)的第1位都是1。

BIG5,GBK&GB18030:高字節(jié)的第1位為1。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 摘要:本文從Unicode入手,介紹由于通信問題而產(chǎn)生的字符集,以及Unicode的發(fā)展情況。介紹各種字符集的及其...
    瘋狂的冰塊閱讀 2,373評(píng)論 0 6
  • 文件編碼格式 從文件編碼的方式來看,文件可分為ASCII碼文件和二進(jìn)制碼文件兩種。 ASCII文件也稱為文本文件,...
    beimingke閱讀 3,073評(píng)論 0 1
  • 我們每個(gè)人都有丟東西的體驗(yàn)吧,可能是焦急,可能是痛恨,也可能是恐懼。 我已經(jīng)很久沒有丟東西了,直到...
    安非他命rsww閱讀 380評(píng)論 4 4
  • 到了高中,留起了長發(fā),衣著打扮也偏向韓裝,顯的整體我的顏值水準(zhǔn)呈中上水平,表現(xiàn)的還比較活躍。 此時(shí)便有姑娘主動(dòng)追求...
    未央行者閱讀 276評(píng)論 0 0
  • 就像做家務(wù),多做,反復(fù)做,才能熟能生巧,才能靈活應(yīng)用;而不是剛開始,感覺會(huì)了就不做了。讀書做事,都如此。
    zhaodongbo閱讀 612評(píng)論 0 0

友情鏈接更多精彩內(nèi)容