導航:首頁 > 編程語言 > 編程英文字元編碼

編程英文字元編碼

發布時間:2022-06-21 00:05:33

python有哪幾種編碼方式

第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單位元組編碼系統,並等同於國際標准IS/IEC
646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。
第二種:GBK和GB2312。能在計算機中顯示中文字元是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關系表,一個位元組只能最多表示256個字元,用處理中文顯然一個位元組是不夠的,所以我們需要採用兩個位元組來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。
第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免沖突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。
第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組,如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間。

② ASC編碼是怎麼回事在用C++編程時怎麼用

是ASCII碼吧?
通常在編程時根本不需要考慮是怎麼編碼的,你只顧根據語言規則寫自己的代碼就行了,怎麼編碼這個編譯器自己會完成!

附:
ASCII碼是美國標准信息交換標准碼
( American Standard Code for Information Interchange, ASCII )
在計算機中,所有的數據在存儲和運算時都要使用二進制數表示(因為計算機比較傻,只有0和1兩位數的二進制比較適合於它使用),同樣的,象a、b、c、d這樣的52個字母(包括大寫)、以及0、1、2等數字還有一些常用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示,而具體用哪個數字表示哪個符號,當然每個人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通訊而不造成混亂,那麼大家就必須使用相同的編碼規則,於是美國有關的標准化組織就出台了所謂的ASCII編碼,統一規定了上述常用符號用哪個二進制數來表示。
美國標准信息交換代碼是由美國國家標准學會(American National Standard Institute , ANSI )制定的,標準的單位元組字元編碼方案,用於基於文本的數據。起始於50年代後期,在1967年定案。它最初是美國國家標准,供不同計算機在相互通信時用作共同遵守的西文字元編碼標准,它已被國際標准化組織(International Organization for Standardization, ISO)定為國際標准,稱為ISO 646標准。適用於所有拉丁文字字母。
ASCII 碼使用指定的 7 位或 8 位二進制數組合來表示 128 或 256 種可能的字元。標准 ASCII 碼也叫基礎ASCII碼,使用 7 位二進制數來表示所有的大寫和小寫字母,數字 0 到 9、標點符號, 以及在美式英語中使用的特殊控制字元。其中:
0~31及127(共33個)是控制字元或通訊專用字元(其餘為可顯示字元),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(振鈴)等;通訊專用字元:SOH(文頭)、EOT(文尾)、ACK(確認)等;ASCII值為 8、9、10 和 13 分別轉換為退格、製表、換行和回車字元。它們並沒有特定的圖形顯示,但會依不同的應用程序,而對文本顯示有不同的影響。
32~126(共95個)是字元(32sp是空格),其中48~57為0到9十個阿拉伯數字;
65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算符號等。
同時還要注意,在標准ASCII中,其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個位元組中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規定:正確的代碼一個位元組中1的個數必須是偶數,若非偶數,則在最高位b7添1。
後128個稱為擴展ASCII碼,目前許多基於x86的系統都支持使用擴展(或「高」)ASCII。擴展 ASCII 碼允許將每個字元的第 8 位用於確定附加的 128 個特殊符號字元、外來語字母和圖形符號。

③ 已知英文字母的ASCII 碼值為108,那麼英文字母i的ASC碼值是

編碼就是要數字化。
最簡單的編碼就是用流水號,但是流水號通常不方便使用(包括不方便數據處理),沒有考慮類別劃分(大類、中類、小類)的規律性。
數字化還要考慮存儲,存儲只能使用有限字長,且需要考慮盡量節省存儲位。

描述CPU功能的編碼方案有各種指令集。 整數的編碼方案有原碼、補碼; 浮點數的編碼方案有IEEE754,包括階碼(移碼); 點陣圖可以用位來表示顏色信息,有相應的編碼和壓縮方案; 音頻可以采樣聲波的振動頻率來數字化,兩樣有相應的編碼和壓縮方案,視頻也是如此。

電子計算機是二進制的,編碼使用二進制數字,要編碼的對象有多少?就要考慮使用多少個二進制位。例如全球有70多億人口(假設75億),如果用二進制位給每人一個編號,需要多少個二進制位?就是2的多少次冪等於75億,是一個對數的計算。log2(7500000000)≈32.8,用33個二進制位就夠了。
這里要說的是字元的編碼方案。
1 ASCII
英文字元數量少,用7個二進制就夠了,但電腦的數據讀寫的二進制通常使用2的整數倍,就用了8個位,首位用零填充。美國人就搞了個英文字元的編碼方案,稱為ASCII。編碼了128個字元,這100多個字元大部分都可以直接映射到鍵盤,可以直接輸入。
void printAscii(){ for(int i=1;i<=128;i++) { if(i==10 || i ==13) printf("\"); else printf("%3d %c\",i,i); if(i%8==0) printf("\"); }}
雖然只有100多個字元,但其ASCII編碼也是極其有規律性的,考慮到了盡可能方便數據處理。如:
大寫字母的'A'的編碼是是65,其編碼是01000001,也就是十進制的12^6+1,
大寫字母的'a'的編碼是是97,其編碼是01100001,也就是十進制的2^6+2^5+1;
大小寫如何轉換?差別只有第3位。大寫轉小寫,只需要按位轉換這個位就行了。
char toLower(char ch){ return ch | 1<<5;}char toUpper(char ch){ return ch & ~(1<<5);} 2 擴展ASCII
英語用 128 個字元來編碼完全是足夠的,但是用來表示其他語言,128 個字元是遠遠不夠的。於是,一些歐洲的國家就決定,將 ASCII 碼中閑置的最高位利用起來,這樣一來就能表示 256 個字元。
3 GB2312和BGK
ASCII 碼的問題在於盡管所有人都在 0 - 127 號字元上達成了一致,但對於 128 - 255 號字元上卻有很多種不同的解釋。與此同時,亞洲語言有更多的字元需要被存儲,一個位元組已經不夠用了。於是,人們開始使用兩個位元組來存儲字元。
等中國人們得到計算機時,已經沒有可以利用的位元組位來表示漢字,況且有6000多個常用漢字需要保存呢。但是這難不倒智慧的中國人民,我們不客氣地把那些127號之後的奇異符號們直接取消掉,規定一個小於127的字元的意義與原來相同,但兩個大於127的字元連在一起時,就表示一個漢字,前面的一個位元組(他稱之為高位元組)從0xA1用到 0xF7,後面一個位元組(低位元組)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼里,我們還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個位元組長的編碼,這就是常說的」全形」字元,而原來在127號以下的那些就叫」半形」字元了。 中國人民看到這樣很不錯,於是就把這種漢字方案叫做 「GB2312「。GB2312 是對 ASCII 的中文擴展。
void printGB2312(){int i,j,sum=0;for(i=0xA1;i<0xAA;i++){for(j=0xA1;j<0xFF;j++) { printf("%c%c",i,j); sum++; }}for(i=0xB0;i<0xF8;i++){for(j=0xA1;j<0xFF;j++) { printf("%c%c",i,j); sum++; } } printf("\合計:%d\",sum); // 7614}
但是中國的漢字太多了,我們很快就就發現有許多人的人名沒有辦法在這里打出來。於是我們不得不繼續把 GB2312 沒有用到的碼位找出來老實不客氣地用上。 後來還是不夠用,於是乾脆不再要求低位元組一定是127號之後的內碼,只要第一個位元組是大於127就固定表示這是一個漢字的開始,不管後面跟的是不是擴展字元集里的內容。結果擴展之後的編碼方案被稱為 GBK 標准,GBK包括了GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。 後來少數民族也要用電腦了,於是我們再擴展,又加了幾千個新的少數民族的字,GBK擴成了 GB18030。從此之後,中華民族的文化就可以在計算機時代中傳承了。 中國的程序員們看到這一系列漢字編碼的標準是好的,於是通稱他們叫做 「DBCS「(Double Byte Charecter Set 雙位元組字元集)。在DBCS系列標准里,最大的特點是兩位元組長的漢字字元和一位元組長的英文字元並存於同一套編碼方案里,因此他們寫的程序為了支持中文處 理,必須要注意字串里的每一個位元組的值,如果這個值是大於127的,那麼就認為一個雙位元組字元集里的字元出現了。那時候凡是受過加持,會編程的計算機僧侶 們都要每天念下面這個咒語數百遍: 「一個漢字算兩個英文字元!一個漢字算兩個英文字元……」
void printGBK(){ int sum = 0; FILE * fp; fp = fopen("d:\\\\GBK.txt","w");int i,j;for(i=0x81;i<0xFF;i++){for(j=0x40;j<0x7F;j++){printf("%c%c",i,j); fprintf(fp,"%c%c",i,j); sum++;}for(j=0x80;j<0xFF;j++){printf("%c%c",i,j); fprintf(fp,"%c%c",i,j); sum++;}printf("\");} printf("\合計:%d\",sum); // 23940 fclose(fp); system("d:\\\\GBK.txt"); }
4 Unicode和UCS-2、UCS-4
因為當時各個國家都像中國這樣搞出一套自己的編碼標准,結果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼,連大陸和台灣這樣只相隔了150海里,使用著同一種語言的地區,也分別採用了不同的 DBCS 編碼方案——當時的中國人想讓電腦顯示漢字,就必須裝上一個」漢字系統」,專門用來處理漢字的顯示、輸入的問題,如果裝錯了字元系統,顯示就會亂了套!這怎麼辦?而且世界民族之林中還有那些一時用不上電腦的窮苦人民,他們的文字又怎麼辦?
一個叫 ISO (國際標誰化組織)的國際組織決定著手解決這個問題。他們採用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號的編碼!稱為「Universal Multiple-Octet Coded Character Set」,簡稱 UCS,俗稱 「unicode」。
UCS-2 採用 16 位存儲空間,兩個位元組編碼每個字元,而 UCS-4 採用 4 個位元組(實際上只用了 31 位,最高位必須為 0)編碼。UCS-2 有 2^16=65536 個碼位,UCS-4 有 2^31=2147483648 個碼位。
對於ASCII里的那些「半形」字元,unicode包持其原編碼不變,只是將其長度由原來的8位擴展為16位,而其他文化和語言的字元則全部重新統一編碼。由於」半形」英文符號只需要用到低8位,所以其高8位永遠是0,因此這種大氣的方案在保存英文文本時會多浪費一倍的空間。
UCS-4 根據最高位為 0 的最高位元組分成 27=128 個組(group)。每個組再根據次高位元組分為 256 個平面(plane)。每個平面根據第 3 個位元組分為 256 行 (rows),每行包含 256 個單元(cells)。當然同一行的單元只是最後一個位元組不同,其餘都相同。
ISO 只用到 17 個平面,包含 1 個基本平面(BMP)和 16 個輔助平面,最高碼位 U+10FFFF。
0 組的 0 號平面被稱作 Basic Multilingual Plane,即基本多文種平面,簡寫 BMP。可知 BMP 區域內的字元只使用了兩個位元組,碼位從 U+0000 至 U+FFFF。它實際上就是 UCS-2 的全部編碼范圍,後來因為碼位不夠用才擴展為 UCS-4。
5 多位元組字元的輸入、輸出
例如漢字,鍵盤只有100多個按鍵?如何輸入漢字?
現在我們使用的各種中文輸入法(搜狗拼音輸入法,王碼輸入法)就是中文輸入的編碼方案。不要看我們現在有各種方便快捷的輸入法,最初可是一個老大難問題。
漢字的輸出其實就是點陣圖形的輸出,也就是所謂的字型檔。
6 多位元組字元的存儲和讀取幾個位元組做為一個位元組編碼的問題
Unicode和UCS-2、UCS-4的編碼方案,就同時考慮了存儲的問題。即要方便存儲空間的節約(排在前面的編碼可以使用較少的位來存儲,排在後面的編碼需要使用較多的位來存儲)。
UTF-8、UTF-16、UTF-32就是UCS-4存儲方案的實現。
unicode在很長一段時間內無法推廣,直到互聯網的出現,為解決unicode如何在網路上傳輸的問題,於是面向傳輸的眾多 UTF(UCS Transfer Format)標准出現了,顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是為傳輸而設計的編碼,並使編碼無國界,這樣就可以顯示全世界上所有文化的字元了。
與此同時,文件通過文件頭(無數據))來標識字元的編碼的類型:

Windows使用代碼頁(code page)來適應各個國家和地區。code page可以被理解為內碼。GBK對應的code page是CP936。可以CMD窗口中使用chcp命令來查看,或右擊查看屬性。 使用Windows記事本的「另存為」,可以在GBK、Unicode、Unicode big endian和UTF-8這幾種編碼方式間相互轉換。 在bat中使用重定向來生成文本文件時,第一行可以聲明chcp 65001,文件對應的存儲方案就是utf-8。

對於文件內的字元,按文件頭標識的編碼方案來解釋,對於定長的ASCII和UTF-32,可以使用定長的位元組數來表示一個字元。
對於不定長的UTF-8,其每個位元組的前幾位都特意做了固定編碼,用來識別一個字元需要讀取幾個位元組。
UTF-16 的編碼長度要麼是 2 個位元組(U+0000 到 U+FFFF),要麼是 4 個位元組(U+010000 到 U+10FFFF)。那麼問題來了,當我們遇到兩個位元組時,到底是把這兩個位元組當作一個字元還是與後面的兩個位元組一起當作一個字元呢?
UCS-4的解決方案是在0平面(基本平面)同設置一個代理區(Surrogate,U+D800 ~ U+DFFF),這些碼點不對應任何字元。因此,這個空段可以用來映射輔助平面的字元。
輔助平面的字元位共有 2^20 個,因此表示這些字元至少需要 20 個二進制位。UTF-16 將這 20 個二進制位分成兩半,前 10 位映射在 U+D800 到 U+DBFF,稱為高位(H),後 10 位映射在 U+DC00 到 U+DFFF,稱為低位(L)。這意味著,一個輔助平面的字元,被拆成兩個基本平面的字元表示。
D800 二進制:1101101100000000
DC00 二進制:1101110000000000
DFFF 二進制:1101111111111111
utf-16 四位元組存儲編碼方案:
110110yy yyyyyyyy 110111xx xxxxxxxx
(上面的字元y、x就是UCS-4的編碼表示)
因此,當我們遇到兩個位元組,發現它的碼點在 U+D800 到 U+DBFF 之間,就可以斷定,緊跟在後面的兩個位元組的碼點,應該在 U+DC00 到 U+DFFF 之間,這四個位元組必須放在一起解讀。
接下來,以漢字(上面一個土字,下面一個口字,其碼點為 0x20BB7)為例,說明 UTF-16 編碼方式是如何工作的。
0x20BB7顯然超出了基本平面的范圍(0x0000 - 0xFFFF),因此需要使用四個位元組表示。首先用 0x20BB7 - 0x10000 計算出超出的部分,然後將其用 20 個二進制位表示(不足前面補 0 ),結果為0001000010 1110110111。接著,將前 10 位映射到 U+D800 到 U+DBFF 之間,後 10 位映射到 U+DC00 到 U+DFFF 即可。U+D800 對應的二進制數為 1101100000000000,直接填充後面的 10 個二進制位即可,得到 1101100001000010,轉成 16 進制數則為 0xD842。同理可得,低位為 0xDFB7。因此得出漢字"?"的 UTF-16 編碼為 0xD842 0xDFB7。
Unicode3.0 中給出了輔助平面字元的轉換公式:

H = Math.floor((c-0x10000) / 0x400)+0xD800 L = (c - 0x10000) % 0x400 + 0xDC00

根據編碼公式,可以很方便的計算出字元的 UTF-16 編碼。
經典的不定長編碼演算法如哈夫曼編碼就可以根據對象的出現頻率來確定其編碼長度,頻率高的使用較短的編碼,且不存在歧義。
7 詳細了解UCS-4的17個平面
直接看錶格:
平面
編碼范圍
中文名稱
英文名稱
0號平面
U+0000 - U+FFFF
基本多文種平面
Basic Multilingual Plane,簡稱BMP
1號平面
U+10000 - U+1FFFF
多文種補充平面
Supplementary Multilingual Plane,簡稱SMP
2號平面
U+20000 - U+2FFFF
表意文字補充平面
Supplementary Ideographic Plane,簡稱SIP
3號平面
U+30000 - U+3FFFF
表意文字第三平面
Tertiary Ideographic Plane,簡稱TIP
4~13號平面
U+40000 - U+DFFFF
(尚未使用)
14號平面
U+E0000 - U+EFFFF
特別用途補充平面
Supplementary Special-purpose Plane,簡稱SSP
15號平面
U+F0000 - U+FFFFF
保留作為私人使用區(A區)
Private Use Area-A,簡稱PUA-A
16號平面
U+100000 - U+10FFFF
保留作為私人使用區(B區)
Private Use Area-B,簡稱PUA-B
圖示:
UCS-4的0平面對應UCS-2的全部字元編碼。
綠色表示專用區PUA(Private Use Area),保留給大家放自定義字元的區域。

平面0: 0xE000-0xF8FF,有6400個碼位 平面16:0xF0000 -0xFFFFD 平面17:0x100000-0x10FFFD

紅色表示作代理區(Surrogate):

平面0的0xD800-0xDFFF,共2048個碼位 代理區的目的用兩個UTF-16字元表示BMP以外的字元(見上一節關於utf-16四位存儲的說明)。

再將前三個格子放大,藍綠色部分是漢字,棕色部分是朝鮮語:
統計:
第2平面的漢字可以在以下頁面查看:
https://www.qqxiuzi.cn/zh/unicode-zifu.php?plane=2
可在以下網頁查看各個平面的字元:
https://www.qqxiuzi.cn/zh/unicode-zifu.php
unicode官網:
https://www.unicode.org/charts/
8 GB2312和unicode
GB2312編碼使用的是區位碼尋字方式,1-9區存放中文符號,16-55區存放一級漢字,56-87區存放二級漢字。
每個漢字及符號以兩個位元組來表示。第一個位元組稱為「高位位元組」(也稱「區位元組)」,第二個位元組稱為「低位位元組」(也稱「位位元組」)。
「高位位元組」使用了0xA1-0xF7(把01-87區的區號加上0xA0),「低位位元組」使用了0xA1-0xFE(把01-94加上 0xA0)。 由於一級漢字從16區起始,漢字區的「高位位元組」的范圍是0xB0-0xF7,「低位位元組」的范圍是0xA1-0xFE,佔用的碼位是 72*94=6768。其中有5個空位是D7FA-D7FE。
例如「啊」字在大多數程序中,會以兩個位元組,0xB0(第一個位元組) 0xA1(第二個位元組)儲存。區位碼=區位元組+位位元組(與區位碼對比:0xB0=0xA0+16,0xA1=0xA0+1)。
unicode對漢字進行了重新編碼,這和gb2312編碼的方式和順序完全不同,unicode對漢字編碼從0x4E00開始,到0x9FA5為止,所以unicode和gb2312編碼的轉換,就需要一個轉換對照表。
void getUnicode2Asc(){ wchar_t wc; setlocale(LC_ALL,"");//設置為本地區域 fflush(stdin); puts("請輸入需要查詢UCS-2的漢字:\"); wc = getwchar(); wprintf(L"0x%4X\",wc); union{ struct { unsigned int i:4; unsigned int j:4; unsigned int k:4; unsigned int L:4; unsigned int m:4; unsigned int n:4; }; char hanzi[3]; }hz; fflush(stdin); puts("查詢gb2312碼,請重新輸入一遍上述查詢的漢字:"); gets(hz.hanzi); printf("0x%X%X%X%X\",hz.j,hz.i,hz.L,hz.k);}
res:
https://www.toutiao.com/a6812925247289819660
https://blog.csdn.net/hezh1994/article/details/78899683
https://blog.51cto.com/u_15127491/2655330
-End-

④ 一個字元的標准ascii碼碼長是7bits嗎

一個字元的標准ascii碼碼長是7bits。

ASCII ((American Standard Code for Information Interchange): 美國信息交換標准代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是最通用的信息交換標准,並等同於國際標准ISO/IEC 646。ASCII第一次以規范標準的類型發表是在1967年,最後一次更新則是在1986年,到目前為止共定義了128個字元 。

ASCII 碼使用指定的7 位或8 位二進制數組合來表示128 或256 種可能的字元。標准ASCII 碼也叫基礎ASCII碼,使用7 位二進制數(剩下的1位二進制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號,以及在美式英語中使用的特殊控制字元 。其中:

0~31及127(共33個)是控制字元或通信專用字元(其餘為可顯示字元),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(響鈴)等;通信專用字元:SOH(文頭)、EOT(文尾)、ACK(確認)等;ASCII值為8、9、10 和13 分別轉換為退格、製表、換行和回車字元。它們並沒有特定的圖形顯示,但會依不同的應用程序,而對文本顯示有不同的影響 。

⑤ Java編程中怎麼選擇正確的字元編碼

如果是修改文件的編碼方式,可以按以下步驟:
選中文件右鍵-->Properties-->Resource-->Text file encoding-->選中Other,然後選擇自己想要的編碼格式就可以了。
如果是修改MyEclipse的編碼方式,可以按以下步驟:
菜單欄的Window-->Perferences-->General-->Work Space-->Text file encoding-->選中Other,然後選擇自己想要的編碼格式就可以了。

⑥ 對一個9個英文字元的字元串進行什麼演算法的編碼,獲得的結果字元串最短

統計字元串中出現的字元及次數; 根據出現的次數作為權值,對每一個字元進行編碼; 輸入一串01字元,根據編碼進行解碼。

編碼(Encoding)是一種計算機編程語言的代碼,是信息從一種形式或格式轉換為另一種形式的過程。

通常是用預先規定的方法將文字、數字或其他對象編成數碼,或將信息、數據轉換成規定的電脈沖信號。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。

⑦ ASCII,Unicode,GBK和UTF-8字元編碼的區別聯系

ASCII、Unicode、GBK和UTF-8字元編碼的區別聯系

很久很久以前,有一群人,他們決定用8個可以開合的晶體管來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為」位元組「。再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到這樣是好的,於是它們就這機器稱為」計算機「。

開始計算機只在美國用。八位的位元組一共可以組合出256(2的8次方)種不同的狀態。
他們把其中的編號從0開始的32種狀態分別規定了特殊的用途,一但終端、列印機遇上約定好的這些位元組被傳過來時,就要做一些約定的動作。遇上0×10,
終端就換行,遇上0×07, 終端就向人們嘟嘟叫,例好遇上0x1b,
列印機就列印反白的字,或者終端就用彩色顯示字母。他們看到這樣很好,於是就把這些0×20以下的位元組狀態稱為」控制碼」。他們又把所有的空
格、標點符號、數字、大小寫字母分別用連續的位元組狀態表示,一直編到了第127號,這樣計算機就可以用不同位元組來存儲英語的文字了。大家看到這樣,都感覺
很好,於是大家都把這個方案叫做 ANSI 的」Ascii」編碼(American Standard Code for Information Interchange,美國信息互換標准代碼)。當時世界上所有的計算機都用同樣的ASCII方案來保存英文文字。

後來,就像建造巴比倫塔一樣,世界各地的都開始使用計算機,但是很多國家用的不是英文,他們的字母里有許多是ASCII里沒有的,為了可以在計算機
保存他們的文字,他們決定採用
127號之後的空位來表示這些新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最後一個狀態255。從128
到255這一頁的字元集被稱」擴展字元集「。從此之後,貪婪的人類再沒有新的狀態可以用了,美帝國主義可能沒有想到還有第三世界國家的人們也希望可以用到計算機吧!

等中國人們得到計算機時,已經沒有可以利用的位元組狀態來表示漢字,況且有6000多個常用漢字需要保存呢。但是這難不倒智慧的中國人民,我們不客氣
地把那些127號之後的奇異符號們直接取消掉,
規定:一個小於127的字元的意義與原來相同,但兩個大於127的字元連在一起時,就表示一個漢字,前面的一個位元組(他稱之為高位元組)從0xA1用到
0xF7,後面一個位元組(低位元組)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼里,我們還把數學符號、羅馬希臘的
字母、日文的假名們都編進去了,連在 ASCII
里本來就有的數字、標點、字母都統統重新編了兩個位元組長的編碼,這就是常說的」全形」字元,而原來在127號以下的那些就叫」半形」字元了。
中國人民看到這樣很不錯,於是就把這種漢字方案叫做 「GB2312「。GB2312 是對 ASCII 的中文擴展。

但是中國的漢字太多了,我們很快就就發現有許多人的人名沒有辦法在這里打出來,特別是某些很會麻煩別人的國家領導人。於是我們不得不繼續把
GB2312 沒有用到的碼位找出來老實不客氣地用上。
後來還是不夠用,於是乾脆不再要求低位元組一定是127號之後的內碼,只要第一個位元組是大於127就固定表示這是一個漢字的開始,不管後面跟的是不是擴展字
符集里的內容。結果擴展之後的編碼方案被稱為 GBK 標准,GBK包括了GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。 後來少數民族也要用電腦了,於是我們再擴展,又加了幾千個新的少數民族的字,GBK擴成了 GB18030。從此之後,中華民族的文化就可以在計算機時代中傳承了。 中國的程序員們看到這一系列漢字編碼的標準是好的,於是通稱他們叫做 「DBCS「(Double
Byte Charecter Set
雙位元組字元集)。在DBCS系列標准里,最大的特點是兩位元組長的漢字字元和一位元組長的英文字元並存於同一套編碼方案里,因此他們寫的程序為了支持中文處
理,必須要注意字串里的每一個位元組的值,如果這個值是大於127的,那麼就認為一個雙位元組字元集里的字元出現了。那時候凡是受過加持,會編程的計算機僧侶
們都要每天念下面這個咒語數百遍: 「一個漢字算兩個英文字元!一個漢字算兩個英文字元……」

因為當時各個國家都像中國這樣搞出一套自己的編碼標准,結果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼,連大陸和台灣這樣只相隔了150海
里,使用著同一種語言的兄弟地區,也分別採用了不同的 DBCS
編碼方案——當時的中國人想讓電腦顯示漢字,就必須裝上一個」漢字系統」,專門用來處理漢字的顯示、輸入的問題,但是那個台灣的愚昧封建人士寫的算命程序
就必須加裝另一套支持 BIG5
編碼的什麼」倚天漢字系統」才可以用,裝錯了字元系統,顯示就會亂了套!這怎麼辦?而且世界民族之林中還有那些一時用不上電腦的窮苦人民,他們的文字又怎
么辦? 真是計算機的巴比倫塔命題啊!

正在這時,大天使加百列及時出現了——一個叫 ISO
(國際標誰化組織)的國際組織決定著手解決這個問題。他們採用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號
的編碼!他們打算叫它」Universal Multiple-Octet Coded Character Set」,簡稱 UCS, 俗稱 「unicode「。
unicode開始制訂時,計算機的存儲器容量極大地發展了,空間再也不成為問題了。於是 ISO
就直接規定必須用兩個位元組,也就是16位來統一表示所有的字元,對於ASCII里的那些「半形」字元,unicode包持其原編碼不變,只是將其長度由原
來的8位擴展為16位,而其他文化和語言的字元則全部重新統一編碼。由於」半形」英文符號只需要用到低8位,所以其高8位永遠是0,因此這種大氣的方案在
保存英文文本時會多浪費一倍的空間。

這時候,從舊社會里走過來的程序員開始發現一個奇怪的現象:他們的strlen函數靠不住了,一個漢字不再是相當於兩個字元了,而是一個!是的,從unicode開始,無論是半形的英文字母,還是全形的漢字,它們都是統一的」一個字元「!同時,也都是統一的」兩個位元組「,請注意」字元」和」位元組」兩個術語的不同,「位元組」是一個8位的物理存貯單元,而「字元」則是一個文化相關的符號。在unicode中,一個字元就是兩個位元組。一個漢字算兩個英文字元的時代已經快過去了。

unicode同樣也不完美,這里就有兩個的問題,一個是,如何才能區別unicode和ascii?計算機怎麼知道三個位元組表示一個符號,而不是
分別表示三個符號呢?第二個問題是,我們已經知道,英文字母只用一個位元組表示就夠了,如果unicode統一規定,每個符號用三個或四個位元組表示,那麼每
個英文字母前都必然有二到三個位元組是0,這對於存儲空間來說是極大的浪費,文本文件的大小會因此大出二三倍,這是難以接受的。

unicode在很長一段時間內無法推廣,直到互聯網的出現,為解決unicode如何在網路上傳輸的問題,於是面向傳輸的眾多 UTF(UCS Transfer Format)標准出現了,顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是為傳輸而設計的編碼,並使編碼無國界,這樣就可以顯示全世界上所有文化的字元了。

UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個位元組表示一個符號,根據不同的符號而變化位元組長度,當字元在ASCII
碼的范圍時,就用一個位元組表示,保留了ASCII字元一個位元組的編碼做為它的一部分,注意的是unicode一個中文字元佔2個位元組,而UTF-8一個中
文字元佔3個位元組)。從unicode到uft-8並不是直接的對應,而是要過一些演算法和規則來轉換。

Unicode符號范圍 | UTF-8編碼方式

(十六進制) | (二進制)
—————————————————————–
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

⑧ 編碼方式是什麼

編碼方式就是指通過特定的壓縮技術,將某個視頻格式的文件轉換成另一種視頻格式文件的方式

⑨ C語言中一個英文字母.漢字.數字 分別都占幾個位元組啊

1、英文字母:如果是char 型,那麼是佔用1個位元組,如果是string型,應該是兩個。

char c = 'a';//它佔用一個字元

char c[] = "a";//佔用兩個。

char c[] = "abcde";//佔用4+1 = 5 個,結尾有一個''

2、數字:這個有很多中,從小到大分別為:short、int、float、long、double
分別為:1個、2個、4個、8個、16個

3、漢字:理論上說,一個漢字佔用兩個字元。比如:中國,就佔用4個字元,如果是:

char c[] = "中國";//佔用4+1 = 5個字元

char c = '中';//錯誤,不能這樣計算

(9)編程英文字元編碼擴展閱讀

1、C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

2、C語言的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。

3、由於C語言允許直接訪問物理地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位(bit)、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。

參考資料 網路-C語言

⑩ 1個英文字母等於多少位元組

不同編碼方式1個英文字母占的位元組是不同的:

1,ASCII碼:一個英文字母(不分大小寫)佔一個位元組的空間,一個中文漢字占兩個位元組的空間。

2,UTF-8編碼:一個英文字元等於一個位元組,一個中文(含繁體)等於三個位元組。中文標點佔三個位元組,英文標點佔一個位元組

3,Unicode編碼:一個英文等於兩個位元組,一個中文(含繁體)等於兩個位元組。中文標點占兩個位元組,英文標點占兩個位元組

(10)編程英文字元編碼擴展閱讀:

位元組:

位元組是指一小組相鄰的二進制數碼。通常是8位作為一個位元組。它是構成信息的一個小單位,並作為一個整體來參加操作,比字小,是構成字的單位。

在微型計算機中,通常用多少位元組來表示存儲器的存儲容量。

例如,在C++的數據類型表示中,通常char為1個位元組,int為4個位元組,double為8個位元組。

理解編碼的關鍵,是要把字元的概念和位元組的概念理解准確。這兩個概念容易混淆,我們在此做一下區分:

概念描述 舉例

字元人們使用的記號,抽象意義上的一個符號。 '1', '中', 'a', '$', '¥' ……

位元組計算機中存儲數據的單元,一個8位的二進制數,是一個很具體的存儲空間。0x01, 0x45, 0xFA……

閱讀全文

與編程英文字元編碼相關的資料

熱點內容
不會數學英語如何編程 瀏覽:88
如何能知道網站伺服器地址 瀏覽:648
程序員月薪5萬難嗎 瀏覽:138
如何評價程序員 瀏覽:802
雲虛機和伺服器的區別 瀏覽:403
廣西柳州壓縮機廠 瀏覽:639
arm開發編譯器 瀏覽:833
51單片機的核心 瀏覽:746
看電視直播是哪個app 瀏覽:958
將c源程序編譯成目標文件 瀏覽:787
再要你命3000pdf 瀏覽:558
ai軟體解壓軟體怎麼解壓 瀏覽:520
文件夾怎樣設置序列號 瀏覽:963
javascriptgzip壓縮 瀏覽:248
易語言怎麼取出文件夾 瀏覽:819
蘋果xs手機加密app哪裡設置 瀏覽:605
超聲霧化器與壓縮霧化器 瀏覽:643
模擬實現進程調度演算法 瀏覽:388
現在的壓縮包都是加密 瀏覽:331
施工員找工作去哪個app 瀏覽:632