WORDdata_utf16[]={0x6c49,0x5b57};\/\/UTF-16編碼
DWORDdata_utf32[]={0x6c49,0x5b57};\/\/UTF-32編碼
這裡用BYTE、WORD、DWORD分別表示無符號8位整數,無符號16位整數和無符號32位整數。UTF-8、UTF-16、UTF-32分別以BYTE、WORD、DWORD作為編碼單位。“漢字”的UTF-8編碼需要6個字節。“漢字”的UTF-16編碼需要兩個WORD,大小是4個字節。“漢字”的UTF-32編碼需要兩個DWORD,大小是8個字節。根據字節序的不同,UTF-16可以被實現為UTF-16LE或UTF-16BE,UTF-32可以被實現為UTF-32LE或UTF-32BE。下麵介紹UTF-8、UTF-16、UTF-32、字節序和BOM。
UTF-8
UTF-8以字節為單位對Uni進行編碼。從Uni到UTF-8的編碼方式如下:
Uni編碼(16進製)║UTF-8字節流(二進製)
000000-00007F║0xxxxxxx
000080-0007FF║110xxxxx10xxxxxx
000800-00FFFF║1110xxxx10xxxxxx10xxxxxx
010000-10FFFF║11110xxx10xxxxxx10xxxxxx10xxxxxx
UTF-8的特點是對不同範圍的字符使用不同長度的編碼。對於0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同。UTF-8編碼的最大長度是4個字節。從上表可以看出,4字節模板有21個x,即可以容納21位二進製數字。Uni的最大碼位0x10FFFF也隻有21位。
請到𝐨𝐨𝐩.𝐭𝐰查看完整章節
例1:“漢”字的Uni編碼是0x6C49。0x6C49在0x0800-0xFFFF之間,使用用3字節模板了:1110xxxx10xxxxxx10xxxxxx。將0x6C49寫成二進製是:0110110001001001,用這個比特流依次代替模板中的x,得到:111001101011000110001001,即E6B189。
例2:Uni編碼0x20C30在0x010000-0x10FFFF之間,使用用4字節模板了:11110xxx10xxxxxx10xxxxxx10xxxxxx。將0x20C30寫成21位二進製數字(不足21位就在前麵補0):000100000110000110000,用這個比特流依次代替模板中的x,得到:11110000101000001011000010110000,即F0A0B0B0。
UTF-16
uni
UTF-16編碼以16位無符號整數為單位。我們把Uni
uni編碼記作U。編碼規則
如下:
如果U<0x10000,U的UTF-16編碼就是U對應的16位無符號整數(為書寫簡便,下文將16位無符號整數記作WORD)。
。xxxxxxxxxx111011yyyyyyyyyy011011:是就)製進二(碼編61-FTU的U,xxxxxxxxxxyyyyyyyyyy:式形製進二成寫'U將後然,00001x0-U='U算計先們我,00001x0≥U果如
。03CDx0348Dx0即,00001100001110111100001000011011:到得就,x的中板模代替次依位01後用,y的中板模代替次依位01前用。00001100001100001000:是製進二成寫,03C01x0到得,後00001x0去減,03C02x0碼編inU:如例。示表位製進二個02用以可定肯以所,fffffx0是值大最的'U,後00001x0去減,ffff01x0是位碼大最的inU?位製進二個02成寫被以可'U麼什為
。FFFDx0-00CDx0即,1111111111111011到0000000000111011是)製進二(圍範值取的DROW個二第。FFBDx0-008Dx0即,1111111111011011到0000000000011011是)製進二(圍範值取的DROW個一第,見可。111011是位6高的DROW個二第,011011是位6高的DROW個一第,DROW個兩有碼編61-FTU的FFFF01x0-00001x0碼編inU,則規述上照按
:)etagorruS(區理代為稱並,來下留保FFFDx0-008Dx0將者計設的碼編inU,來開分區碼編61-FTU的DROW個兩與碼編61-FTU的DROW個一將了為
代替位高║setagorruShgiH║F7BD-008D
代替用專位高║setagorruSesUetavirPhgiH║FFBD-08BD
代替位低║setagorruSwoL║FFFD-00CD
。碼編inU導推碼編61-FTU由麼怎看看便順,題問個這答解來們我?思意麼什是代替用專位高,麼那。DROW個二第的碼編61-FTU的DROW個兩是位碼的圍範個這指是就代替位低。DROW個一第的碼編61-FTU的DROW個兩是位碼的圍範個這指是就代替位高
個這將們我。FFFDx0FFBDx0到00CDx008BDx0是該應圍範碼編61-FTU的符字個這以所,FFFDx0-00CDx0是圍範值取的DROW個二第道知們我?內圍範麼什在碼編inU的它麼那,間之FFBDx0到08BDx0在DROW個一第的碼編61-FTU的符字個一果如