官术网_书友最值得收藏!

2.1.2 UTF-8

UTF-8是一個多字節(jié)字符集,它可以表示在Unicode字符集中的每個字符,而且與美國7位ASCII字符集向后兼容。每個UTF-8字符由1~4個字節(jié)(請參閱表2.1)表示。如果某個字符僅由1個字節(jié)編碼,那么此字節(jié)最高位是0且其他位包含碼值(取值范圍為0~127)。如果某個字符由多個字節(jié)的序列編碼,那么首字節(jié)中前導(dǎo)1的位數(shù)與序列的總字節(jié)數(shù)相同,然后緊跟著一個0位,且后面的字節(jié)都被標記為一個前導(dǎo)“10”位模式。在字節(jié)序列中的其余位拼接成Unicode的碼點值(取值范圍為0x80~0x10FFFF)。因此,一個具有前導(dǎo)0位的字節(jié)是一個單字節(jié)碼,一個具有多個前導(dǎo)1位的字節(jié)是一個多字節(jié)序列的首字節(jié),而一個具有前導(dǎo)“10”位模式的字節(jié)是一個多字節(jié)序列的延續(xù)字節(jié)。這種字節(jié)格式允許檢測每個序列的開始,而無須從字符串的開頭解碼。

表2.1 形式合法的UTF-8字節(jié)序列

資料來源:[Unicode 2012]

前128個字符構(gòu)成基本執(zhí)行字符集,其中每個字符都是單字節(jié)。

UTF-8的解碼器有時會成為一個安全漏洞。在某些情況下,攻擊者可以通過向它發(fā)送UTF-8語法不允許的一個八位字節(jié)序列,來利用一個不謹慎的UTF-8解碼器。《C安全編碼標準》[Seacord 2008]包括“MSC10-C.字符編碼方式UTF-8相關(guān)的問題”,它描述這個問題以及其他與UTF-8相關(guān)的問題。

主站蜘蛛池模板: 柳州市| 黎城县| 乐至县| 亳州市| 阳信县| 宁夏| 乌审旗| 安徽省| 明溪县| 岳西县| 呼玛县| 酒泉市| 海晏县| 南漳县| 绍兴市| 东山县| 吉林省| 邯郸县| 宁夏| 磴口县| 陆良县| 博野县| 蒲江县| 黑山县| 马关县| 江源县| 淳安县| 安龙县| 曲阳县| 梧州市| 拉孜县| 偏关县| 婺源县| 安福县| 祁连县| 子洲县| 永清县| 台前县| 垦利县| 深圳市| 屏山县|