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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UTF-8和UTF-16简介

發布時間:2023/12/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UTF-8和UTF-16简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先介紹unicode,最開始計劃有31位,但到后來一執行,發現0x 0~10FFFF就夠用了,僅有21位。

UTF-8是一種變長、多字節編碼方案,從一字節模式,到六字節模式。雖然unicode只到21位,但是查看pcre2的源代碼發現,對UTF-8的支持到六字節。

0******* 110***** 10****** 1110**** 10****** 10****** 11110*** 10****** 10****** 10******

這里僅羅列到四字節模式。

分析一個UTF-8編碼的文件,看第一個字節是否是0開頭的,如果是,就是一字節模式,該模式兼容基本ASCII碼,也是128個碼位。

如果第一字節以110開頭,則使用雙字節模式,接下來的那個字節以10開頭。

如果是1110開頭則是三字節模式,如果是11110開頭則是四字節模式。

UTF-16有雙字節模式、四字節模式兩種。

******** ******** 110110** ******** 110111** ********

有人會發現,雙字節模式下,遍歷了16比特的全部65536種情況,那該怎樣區分雙字節模式和四字節模式呢?

原來,設計unicode時早有安排,編碼110110-- --------對應的1024個碼位留空。因為有10個星號,所以是1024個碼位。同理,編碼110111-- --------對應的1024個碼位也為空。共有2048個碼位留空,專門為了UTF-16能正常工作。

即使這樣,四字節模式的UTF-16也只有20個星號啊,可unicode最多有21位,還差1位呢?

算法是這樣的:

設待編碼為U,當0≤U≤FFFF時,采用雙字節模式,此時的U不超過16位,雙字節正好放得下。

若10000≤U≤10FFFF,則需計算U’=U-0x10000,U’的取值范圍是:0≤U’≤FFFFF,U’不大于20位,可以放在四字節模式的模板內。

關于UTF-8和UTF-16的討論,和漢字的長度有關。在UTF-8中,一個漢字占用3字節。這里說的是基本漢字那2萬多個,對于不常用的漢字,需占用4字節。在UTF-16中,一個基本漢字占用2字節。

許多程序員,尤其是老程序員,他們年輕時,unicode還未普及,那時人們記住了:一個漢字兩個字節。所以,他們更容易選擇UTF-16。還有人堅定地選擇GBK,這是一種中國的國標編碼。

然后,互聯網普及了。人們發現各國的編碼不通用,所以就有了unicode。

至于UTF-8中一個漢字占3字節,這沒什么的。表達同樣的意思,用英語和用漢語,英語的字母個數,約是漢字個數的3倍。如integer,7字節;整數,6字節。二者相差不大。

另外,UTF-16有大端小端問題。且UTF-16已經滿了,不能擴充,它甚至需要計算U’來壓縮至20位。而UTF-8沒有大端小端問題,且可以擴充至31位。

所以,我更喜歡UTF-8,至于GB2312、GBK等編碼,早已不再使用了。

總結

以上是生活随笔為你收集整理的UTF-8和UTF-16简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。