幾個概念:
計算機中可見的字元都有乙個二進位制的機器編碼與之對應。
字符集可以理解為這種字元與二進位制的對應關係的集合。
編碼是將字元轉換為二進位制的過程。解碼與之相反。
原始碼字符集:原始碼儲存在計算機磁碟上所採用的編碼方式。
執行字符集:執行的程式中的字元在記憶體中儲存所使用的編碼方式。
內部字符集:編譯器內部使用的字符集。
以gcc為例:
-finput-charset 設定輸入字符集,用於從輸入的字符集轉換,預設為utf8。
-fexec-charset=charset 設定執行字符集。決定了字串常量在記憶體中的編碼。預設為utf8。
輸入字符集決定了原始碼到內部字符集的轉換方式。原始碼儲存方式如果為gbk,且編譯器指定的輸入字符集為gbk。在將c語言編譯為彙編時,會將原始碼字符集轉換為內部utf-8。
執行字符集決定了由內部字符集到執行字符集的轉換方式。如果設定為gbk,在將組合語言翻譯成機器語言時,會將字串常量從內部字符集utf-8向gbk轉換。
如果二者都為utf-8,由於gcc內部字符集也為utf-8,不會發生轉換。記憶體中的字串常量的編碼直接取決於原始碼的編碼。
ascii:使用7位二進位制數(剩下的1位二進位制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號,以及在美式英語中使用的特殊控制字元。後128個稱為擴充套件ascii碼。
ansi:ansi即擴充套件的ascii編碼。不同的國家和地區制定了不同的標準,由此產生了 gb2312、gbk、gb18030、big5、shift_jis等各自的編碼標準。這些使用多個位元組來代表乙個字元的各種漢字延伸編碼方式,稱為 ansi 編碼。在簡體中文windows作業系統中,ansi編碼代表 gb2312編碼;在正體中文windows作業系統中,ansi編碼代表big5;在日文windows作業系統中,ansi 編碼代表 jis 編碼。
unicode:為了統一各個國家的編碼,出現了unicode。它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼。unicode通常用兩個位元組表示乙個字元,原有的英文編碼從單位元組變成雙位元組,只需要把高位元組全部填為0就可以。
但是unicode並沒有規定unicode在計算機中的儲存方式。沒有解決空間浪費和位元組序問題。於是出現了utf-8。
utf-8:是針對unicode的一種可變長度字元編碼。為1~4個位元組。其中,utf-8編碼的首位元組連續的1的個數表示字元編碼所需的位元組數。並且utf-8編碼單元為單位元組,在解碼時不存在位元組序問題。
編譯faac音訊編碼庫
faac是mpeg 4和mpeg 2的aac編碼器,我們將使用它作為音訊的軟編碼庫。faac官網 sudo wgettar zxvf faac 1.29.9.2.tar.gz1.執行cd faac 1.29.9.2開啟資料夾 2.執行sudo vim generate.sh建立編輯指令碼檔案,並編輯...
編碼 解碼 中文編譯碼
字串和字符集的關係 字串是python程式的一種格式 位元組串是網路傳輸的一種形式 字串和位元組串轉換 字串 str encode 位元組串 bytes 位元組串 bytes decode 字串 str ascii字符集是utf 8字符集的前128位字元,可以說ascii字符集是utf 8字符集的子...
Virsual Studio 字元編碼和編碼方式
編碼我們大致可以分為兩類 檔案編碼和記憶體編碼。檔案編碼 用untraedit可以看到裡面的編碼 即源 檔案的編碼,gbk,utf 8等。記憶體編碼即源 編譯成為二進位制檔案的時候採用的編碼。在此我要說的是記憶體編碼 記憶體編碼在vc中只有3個選項 not set,use multi byte ch...