utf-8 型別為可變長型別,但是utf-8和unicode轉換無需查表,他們的有用資訊部分是完全一致的,轉換規則如下:
utf-8
0000 – 007f
0******x
0080 – 07ff
110***xx 10******
0800 – ffff
1110***x 10****** 10******
可見它是根據數值的大小來做長度區分的:
1.小於7f(127)的數,7bit即可儲存,一位元組的最高bit為0,來和2位元組3位元組長度做區分,同時也完全相容ascii;
2.80到7ff最大數佔11bit,所以乙個位元組肯定不夠了,需要兩個位元組來儲存,多餘的5bit填充110和10,110的含義是接下來兩位元組一體;
3.0800到ffff用3位元組表示,由於最大數長度達到16bit,還要填充指示長度的資訊,所以要使用3位元組,剩餘填充的8bit中1110的含義為接下來3位元組一體。
gbk或gb2313與unicode之間的轉換只能通過查表來實現,姑且算是可變長度的,但它的邊長和utf-8不同,gbk中所有漢字都是2位元組長度,只有原ascii中的字元是1位元組,所以此字符集中只有兩種長度的字元,ascii:1位元組,非ascii:2位元組,並且高位位元組的高bit位為1,以示區分。
重要:
linux中,使用vim時預設編碼為utf-8,如果.c檔案存英文本元,則ascii和utf-8完全一致,所以你可以說編碼方式是ascii也可以說是utf-8,甚至可以說是gbk,因為此時它們沒有任何區別,但是包含ascii字元以外的字元時,就是utf-8。一般gcc和cl.exe(window平台 vs編譯器)在不指定的情況下,選擇執行編碼方式時,gcc會選擇,和原始碼編碼方式一致的執行編碼方式, 而cl.exe則 選擇gbk編碼方式,即使原始碼編碼方式為utf-8,cl.exe也會將utf-8型別的字串先轉化成gbk,在存放在exe可執行檔案中,除非我們認為指定cl.exe必須使用utf-8為執行編碼方式,cl.exe才會放棄gbk編碼,詳細見下表。
#include int main(int argc, char * argv)
執行結果為7,可見編碼方式為utf-8。
此外,也可以手動設定預編譯指令,指定執行編碼方式,詳細見下表
執行字符集:使用winhex檢視可執行檔案中字串常量的位元組流。
是否設定windows預編譯選項:#pragma execution_character_set(「utf-8」)
是否設定linux編譯選項:-finput-charset和-fexec-charse
紅色顯示的就是「漢」的編碼:「漢」的gbk編碼為ba ba,utf-8編碼為e6 b1 89
this的一點見解
執行環境 execution context,有時也成為上下文,有時也稱為 環境 執行環境定義了變數和函式有權訪問那些資料,決定各自的行為。全域性執行環境是最外圍的執行環境。全域性執行環境一直都存在。宿主環境不同執行環境也不同。每乙個環境都有乙個執行環境。當執行流進入乙個函式時,函式的環境就會被推入...
THIS MODULE的一點見解
include module license gpl static int init hellow init void static void exit hellow exit void module init hellow init module exit hellow exit 在我們執行ins...
對工作的一點見解
黨務文字秘書主要負責起草黨委的稿子報告 計畫總結 綜合性重要檔案 綜合性重要文稿等。但是,這個崗位絕不僅僅是處理文字工作那麼簡單,他又是黨委書記的 參謀助手 是上情下達 下情上傳 承上啟下的重要環節,要做好秘書工作,不斷提高為領導服務的質量和水平,對各方面的素質都提出了很高的要求,對我們政治上 思想...