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

2.1.2 UTF-8

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

表2.1 形式合法的UTF-8字節序列

資料來源:[Unicode 2012]

前128個字符構成基本執行字符集,其中每個字符都是單字節。

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

主站蜘蛛池模板: 乌兰察布市| 刚察县| 京山县| 固原市| 庄浪县| 和平区| 宜宾市| 类乌齐县| 中阳县| 荣昌县| 三门县| 马尔康县| 靖西县| 阜阳市| 米泉市| 佛坪县| 虹口区| 岳普湖县| 宝鸡市| 宁都县| 佛山市| 保康县| 迁西县| 隆子县| 新巴尔虎左旗| 独山县| 光泽县| 巴里| 东平县| 马关县| 保山市| 射阳县| 丹凤县| 武定县| 乌兰浩特市| 临洮县| 固安县| 雷波县| 长春市| 汽车| 确山县|