utf是unicode傳輸格式,有utf8, utf16, utf32等。這裡介紹utf8。
utf8分成單位元組、雙位元組、三位元組、四位元組模式。具體如下:
0******x 7bit 相容ascii碼
110***xx 10****** 11bit
1110***x 10****** 10****** 16bit 漢字所在
11110*** 10****** 10****** 10****** 21bit
unicode最多有21位,0-10ffff。
utf8的首位元組還有8個碼位沒有占用,即11111***,設想中有utf8++編碼,用於文字資料和二進位制資料的混合表示:
這8個碼位分成兩組,分別表示1 2 4 8位元組資料,或1 2 4 8位元組長度加資料。如256-8=248,有248 [100],表示乙個位元組的二進位制資料。或者是256-4=252,252 10 [xx xx xx xx xx xx xx xx xx xx],表示連續的10位元組二進位制資料。
248 ? 1byte data
249 ? ? 2byte data
250 ? ? ? ? 4byte data
251 ? ? ? ? ? ? ? ? 8byte data
252 1byte len, 0-255byte data
253 2byte len, 0-65535byte data
254 4byte len, 0-4gb-1 data
255 8byte len, data
另外一套方案,8個碼位使用5個,分別是1 2 4 8位元組長度+資料,和標籤模式。
1位元組標籤長度+標籤開始+資料+標籤結束
[magic byte][4][abcd][data][abcd]
標籤要選擇資料裡邊沒有的。標籤最長255位元組,特別地,當標籤長度=0時,表示1位元組0結尾,即字串。
[magic byte][0][data][0]
流式校驗UTF8格式
由於某個工程需要校驗資料是否是utf8格式的,然後翻了翻rfc,確實挺簡單的編碼格式,所以直接寫了,但是越寫越感覺不對,位元組不夠時真的需要cache嗎?想肯定還有非常簡單的方法,果不其然,找到了這篇 流式校驗 utf8 原始碼 static unsigned char types static u...
VS中無簽名UTF8和帶簽名UTF8格式
在vs中,使用高階儲存選項功能的時候,我們將會發現utf8有兩種格式,乙個是帶簽名的utf8,乙個是無簽名的utf8。那麼這兩種的格式有什麼區別呢?帶簽名的utf8 帶簽名的utf8,是在生成的檔案中,在檔案的開頭使用utf8標誌,這樣在下次使用編輯器編輯的時候,編輯器能準確的識別當前檔案的編碼格式...
utf 8格式字串輸入限制
在對輸入字元進行正則校驗的時候,一般是進行輸入字元的型別匹配和長度匹配。型別匹配是通用的,但是長度匹配則有區別,主要是看傳輸的資料是以什麼格式進行傳輸的。在utf 8中,英文是乙個位元組,普通中文是三個位元組,也有四個位元組的。不同的文字有不同的儲存位數,一共是1 6個位元組。在utf 16中,英文...