日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UTF-8 可变编码格式

發(fā)布時(shí)間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UTF-8 可变编码格式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)自:http://blog.csdn.net/swedenfeng/article/details/53467720 UTF-8 是一種可變編碼格式,長(zhǎng)度從一個(gè)字節(jié)到四個(gè)字節(jié),可根據(jù)UTF-8字符的第一個(gè)字節(jié)來(lái)識(shí)別一個(gè)UTF-8字符的長(zhǎng)度(具體見(jiàn)下面描述).

因?yàn)榫W(wǎng)絡(luò)中大部分的字符是ASCII碼字符,UTF-8可以用一個(gè)字節(jié)表示ASCII字符,相較于UTF-16和UTF-32的兩個(gè)字節(jié)或者四個(gè)字節(jié),大幅節(jié)省了空間和傳輸帶寬.

?

幾個(gè)UTF-8的編碼例子 (由該網(wǎng)頁(yè)工具轉(zhuǎn)換?https://sites.google.com/site/nathanlexwww/tools/utf8-convert?)

?

字符 ? ? ? ? ? ?UTF-8編碼 ? ?Byte 1 ? ? ? ? ? ? ? ? ? Byte 2 ? ? ? ? ? ? Byte 3

A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 01000001 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?11000011 ? ? ? ? ? ?10010110 ? ? ??

中 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 11100100 ? ? ? ? ? ?10111000 ? ? ?10101101

?

Note: ? Byte 1 中開(kāi)頭"1"的個(gè)數(shù)就是整個(gè)?UTF-8編碼中字節(jié)的數(shù)目(只適用于長(zhǎng)度大于等于兩個(gè)字節(jié)的UTF編碼,表示ASCII編碼的UTF首字節(jié)的首位是0)

?

?

#以下內(nèi)容部分來(lái)自wiki,部分來(lái)自stackoverflow.

?

UTF-88-bit Unicode Transformation Format)是一種針對(duì)Unicode的可變長(zhǎng)度字符編碼,也是一種前綴碼。它可以用來(lái)表示Unicode標(biāo)準(zhǔn)中的任何字符,且其編碼中的第一個(gè)字節(jié)仍與ASCII兼容,這使得原來(lái)處理ASCII字符的軟件無(wú)須或只須做少部分修改,即可繼續(xù)使用。因此,它逐漸成為電子郵件、網(wǎng)頁(yè)及其他存儲(chǔ)或發(fā)送文字的應(yīng)用中,優(yōu)先采用的編碼。

UTF-8使用一至六個(gè)字節(jié)為每個(gè)字符編碼(盡管如此,2003年11月UTF-8被RFC 3629重新規(guī)范,只能使用原來(lái)Unicode定義的區(qū)域,U+0000到U+10FFFF,也就是說(shuō)最多四個(gè)字節(jié)):

?

? Binary ? ?Hex ? ? ? ? ? ? ? ? Comments
0xxxxxxx ?0x00..0x7F ? Only byte of a 1-byte character encoding
10xxxxxx ?0x80..0xBF ? Continuation bytes (1-3 continuation bytes)
110xxxxx ?0xC0..0xDF ? First byte of a 2-byte character encoding
1110xxxx ?0xE0..0xEF ? First byte of a 3-byte character encoding
11110xxx ?0xF0..0xF7 ? First byte of a 4-byte character encoding
??
??
對(duì)于UTF-8編碼中的任意字節(jié)X,如果X的第一位為0,則X獨(dú)立的表示一個(gè)字符(ASCII碼)
如果X的第一位為1,第二位為0,則X為一個(gè)多字節(jié)字符中的后續(xù)字節(jié)(非第一字節(jié))
如果X的前兩位為1,第三位為0,則X為兩個(gè)字節(jié)表示的字符中的第一個(gè)字節(jié)
如果X的前三位為1,第四位為0,則X為三個(gè)字節(jié)表示的字符中的第一個(gè)字節(jié)
如果X的前四位為1,第五位為0,則X為四個(gè)字節(jié)表示的字符中的第一個(gè)字節(jié)

?

?

Unicode 和 UTF-8 之間的轉(zhuǎn)換關(guān)系表 (?x?字符表示碼點(diǎn)占據(jù)的位 )碼點(diǎn)的位數(shù)碼點(diǎn)起值碼點(diǎn)終值字節(jié)序列Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6??71116212631
U+0000U+007F10xxxxxxx
U+0080U+07FF2110xxxxx10xxxxxx
U+0800U+FFFF31110xxxx10xxxxxx10xxxxxx
U+10000U+1FFFFF411110xxx10xxxxxx10xxxxxx10xxxxxx
U+200000U+3FFFFFF5111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx
U+4000000U+7FFFFFFF61111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx

?

  • 在ASCII碼的范圍,用一個(gè)字節(jié)表示,超出ASCII碼的范圍就用字節(jié)表示,這就形成了我們上面看到的UTF-8的表示方法,這様?shù)暮锰幨钱?dāng)UNICODE文件中只有ASCII碼時(shí),存儲(chǔ)的文件都為一個(gè)字節(jié),所以就是普通的ASCII文件無(wú)異,讀取的時(shí)候也是如此,所以能與以前的ASCII文件兼容。
  • 大于ASCII碼的,就會(huì)由上面的第一字節(jié)的前幾位表示該unicode字符的長(zhǎng)度,比如110xxxxx前三位的二進(jìn)制表示告訴我們這是個(gè)2BYTE的UNICODE字符;1110xxxx是個(gè)三位的UNICODE字符,依此類推;xxx的位置由字符編碼數(shù)的二進(jìn)制表示的位填入。越靠右的x具有越少的特殊意義。只用最短的那個(gè)足夠表達(dá)一個(gè)字符編碼數(shù)的多字節(jié)串。注意在多字節(jié)串中,第一個(gè)字節(jié)的開(kāi)頭"1"的數(shù)目就是整個(gè)串中字節(jié)的數(shù)目。

?

Some useful links:

http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt

http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=bin


?

##博客僅作個(gè)人記錄##

轉(zhuǎn)載于:https://www.cnblogs.com/paulbai/p/6586941.html

總結(jié)

以上是生活随笔為你收集整理的UTF-8 可变编码格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。