ASCII碼和漢字編碼

2021-02-19 業界達人

接觸了計算機的一些人,不論其學習時間長短,經常會問我些問題:漢字和一些符號是如何輸入的,有無規律可循,等等。今天開始,我慢慢道來。

ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標準ISO/IEC 646。

計算機技術始於美國,創始人(國)大都具有制訂標準的權力。
ASCII碼是由美國國家標準學會(American National Standard Institute , ANSI )制定的,標準的單字節字符編碼方案,用於基於文本的數據,共128個。起始於50年代後期,在1967年定案。

它最初是美國國家標準,供不同計算機在相互通信時用作共同遵守的西文字符編碼標準,它已被國際標準化組織(International Organization for Standardization, ISO)定為國際標準,稱為ISO 646標準。適用於所有拉丁文字字母。

因十進位、十六進位使用得多,列於表上。2、8進位反之,未列上。

鍵盤和滑鼠每次敲擊,都有唯一編碼代表具體符號或功能,這樣才精準不亂。
ASCII 碼,使用指定的7位或8位二進位數組合來表示128 或256 種可能的字符,還有8、10、16位幾種表達方式。
標準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 分別轉換為退格、制表、換行和回車字符。
32~126(共95個)是字符(32是空格),其中48~57為0到9十個阿拉伯數字。
65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算符號等。
如:計算機上的DEL(delete)鍵,十進位ASCII碼為127,十六進位為7F。

擴展ASCII
1981年,美國IBM公司公布了IBM PC ROM256個字符的字符集,即IBM擴展字符集。擴展ASCII 字符是從128 到255(0x80-0xff)的字符,但不再是國際標準。
1985年,美國MS公司公布 Windows字符集,被稱作「ANSI字符集」,遵循了ANSI草案和ISO標準(ANSI/ISO8859-1-1987,簡「Latin 1」。)
1987年4月代碼頁437,字符的映像代碼,在MS-DOS3.3出現。

ASCII拼圖

問題提出
1、ASCII碼是美國人制訂的美國標準,不能良好滿足其它講英語國家的需要。例如英國的英鎊符號(£)在哪裡?
2、拉丁語字母表重音符號,又如何表示?
3、使用斯拉夫字母表的希臘語、希伯來語、阿拉伯語和俄語,怎麼辦?
4、始於中國的象形文字,如中國漢字,日本和朝鮮文字,又怎麼表示?

1967年,國際標準化組織(ISO:International Standards Organization)推薦一個ASCII的變種,代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D「為國家使用保留」,而代碼0x5E、0x60和0x7E標為「當國內要求的特殊字符需要8、9或10個空間位置時,可用於其它圖形符號」。

DBCS(雙字節字符集,double-byte character set),解決中國、日本和韓國的象形文字符和ASCII的某種兼容性。
DBCS從256代碼開始,就像ASCII一樣。與任何行為良好的代碼頁一樣,最初的128個代碼是ASCII。

漢字編碼
(1)漢字國標碼和區位碼
計算機中一個漢字用兩個字節的編碼表示,我國制定了「中華人民共和國國家標準信息交換漢字編碼字符集(基本集GB2312—1980)」,簡稱國標碼,是計算機進行漢字信息處理和漢字信息交換的標準編碼。
在該編碼中,共收錄漢字和圖形符號7445個,其中一級常用漢字3755個(按漢語拼音字母順序排列),二級常用漢字3008個(按部首順序排列),圖形符號682個。

在GB2312-1980中規定,全部國標漢字及符號組成一個94×94的矩陣。在此矩陣中,每一行稱為一個「區」,每一列稱為一個「位」。於是構成了一個有94個區(01~94區),每個區有94個位(01~94位)的漢字字符集。區碼與位碼組合在一起就形成了「區位碼」,唯一地確定某一漢字或符號。

區位碼的分布規則如下:
1)01~09區:圖形符號區。
2)10~15區:自定義符號區。
3)16~55區:一級漢字區,按漢字拼音排序,同音字按筆畫順序。
4)56~87區:二級漢字區,按偏旁部首、筆畫排序。
5)88~94區:自定義漢字區。

漢字輸入碼
漢字輸入碼,就是用於使用西文鍵盤輸入漢字的編碼。每個漢字對應一組由鍵盤符號組成的編碼,不同的漢字輸入法其輸入碼不同。漢字輸入碼也稱外碼。
常見的漢字輸入編碼方案可分為如下4類:
1)數碼:用數字組成的等長編碼,典型代表有區位碼、電報碼。
2)音碼:根據漢字的讀音組成的編碼,典型代表有全拼碼和雙拼碼。
3)形碼:根據漢字的形狀、結構特徵組成的編碼,典型代表有五筆字型、表形碼。
4)音形碼:將漢字讀音與其結構特徵綜合考慮的編碼,典型代表有自然碼、首尾拼音碼。

漢字內碼
無論用戶用哪種輸入法,漢字輸入到計算機後都轉換成漢字內碼進行存儲,以方便機內的漢字處理。漢字內碼是採用雙字節的變形國標碼,在每個字節的低7位與國標碼相同,每個字節的最高位為1,以與ASCII碼字符編碼區別。

漢字字形碼
漢字字形碼(漢字輸出碼),是將點陣組成的漢字模型數位化,形成一串二進位數稱為漢字字形碼,其主要用於輸出漢字。輸出漢字時,將漢字字形碼再還原為由點陣構成的漢字,所以漢字字形碼又被稱為漢字輸出碼。
漢字是一種象形文字,每一個漢字可以看成是一個特定的圖形,這種圖形可以用點陣、 輪廓向量、骨架向量等多種方法表示,而最基本的是用點陣表示。如果用16x16點陣來表示 一個漢字,則一個漢字佔16行,每一行有16個點,其中每一個點用一個二進位位表示,值「0」 表示暗,值「1」表示亮。由於計算機存儲器的每個字節有8個二進位位,因此,16個點要用 兩個字節來存放,16x16點陣的一個漢字字形需要用32個字節來存放,這32個字節中的信息 就構成了一個16x16點陣漢字的字模。

以上只是簡單介紹,讓大家對計算機字符編碼有個基本印象,下回給大家介紹萬國碼,包括世界上所有語言文字。好東西等著吧!

                    

(長按二維碼識別關注)

相關焦點

  • ascii編碼與unicode編碼
    由美國人發明,所以只出現大小寫英文字母、數字和一些符號。因此,最早只有127個字符被編碼到計算機裡,也就是 7位 2進位數字,最高位(第八位)為 0 。    這個編碼表被稱為 ascii編碼,比如大寫字母 H 的編碼是 72(16進位48),小寫字母 o 的編碼是 111(16進位6F)。
  • bcd碼和ascii碼的區別
    最常用的BCD碼稱為8421BCD碼,8.4.2.1 分別是4位二進數的位取值。 點擊此處將給出十進位數和8421BCD編碼的對應關係表。   1、BCD碼與十進位數的轉換   BCD碼與十進位數的轉換。
  • Python 編碼錯誤的本質原因
    ,有時候怎麼試都沒轍,只有借用 Google 大神幫忙,但似乎很少去關心問題的本質是什麼,下次遇到類似的問題重蹈覆轍,那麼你有沒有想過一次性徹底把 Python 字符編碼給搞懂呢?字節字節(Byte)是計算機中數據存儲的基本單元,一字節等於一個8位的比特,計算機中的所有數據,不論是保存在磁碟文件上的還是網絡上傳輸的數據(文字、圖片、視頻、音頻文件)都是由字節組成的。
  • C#字符ASCII碼學習經驗
    C#字符ASCII碼學習經驗 這裡介紹C#字符ASCII碼,很多時候我們需要得到一個英文字符的 ASCII 碼,或者一個漢字字符的 Unicode 碼,或者從相關的編碼查詢它是哪一個字符的編碼。
  • 常用字符編碼介紹
    在百度百科中,是這樣定義的,字符編碼(Character encoding)也叫字符碼,是把字符集中的字符編碼為指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈衝),以便文本在計算機中存儲和通過通信網絡的傳遞。
  • 運維開發:字符集編碼 ASCII,Unicode 和 UTF-8 你知多少
    這一篇文章將讓你徹底了解字符集編碼。本篇文章介紹了ASCII,Unicode 和 UTF-8編碼的問題和轉換還有實例分析。開始閱讀文章吧一、ASCII 碼我們知道,計算機內部,所有信息最終都是一個二進位值。每一個二進位位(bit)有0和1兩種狀態,因此八個二進位位就可以組合出256種狀態,這被稱為一個字節(byte)。
  • 神奇的漢字編碼,了解一下
    一直覺得不是由中國人發明的計算機,卻可以使用漢字進行界面交互非常神奇。今天就來和大家聊一下關於漢字編碼的最底層的邏輯。國家標準GB2312-80提出了中華人民共和國國家標準信息交換用漢字編碼,簡稱國標碼。國標碼有時又稱區位碼。GB2312-80標準包括了6763個漢字,按其使用額度分為一級漢字3755個和二級漢字3008個。
  • 來了解一下文件編碼!
    與數值信息一樣,為了便於在不同的系統之間進行交換,字符必須採用標準的二進位編碼表示。但字符和國家、地區的文化有關,情況非常複雜,本文主要介紹西文字符和漢字字符的常用編碼表示。       目前計算機中使用的最廣泛的西文字符集機器編碼就是ascii字符集和ascii碼,即美國信息交換標準碼。
  • glibc字符編碼研究
    借這道題的機會自己寫了幾個demo來對字符編碼問題進行深入研究。我們經常遇到的ASCII、unicode、Big5、GB2312、GBK等等都屬於編碼系統,他們都包含兩方面的內容:字符集和編碼方案。字符集是編碼系統收錄的圖形符號集合,比如ASCII碼收錄了現代英語字母的圖形,GB2312收錄了常用漢字圖形。
  • Python 編碼為什麼那麼蛋疼?
    據說,每個做 Python 開發的都被字符編碼的問題搞暈過,最常見的錯誤就是 UnicodeEncodeError、UnicodeDecodeError,你好像知道怎麼解決,遺憾的是,錯誤又出現在其它地方,問題總是重蹈覆轍,
  • 給妹子講python-S01E07字符編碼歷史觀:從ASCII到Unicode
    ,不過倒也讓我想起一直以來困惑的一些概念:ASCII碼、Unicode、字符編碼什麼的,一直沒搞明白過,今天不妨就來介紹一下這方面的內容吧。因此中國國家標準總局發布了一套《信息交換用漢字編碼字符集》的國家標準,其標準號就是GB 2312—1980。這個字符集共收入漢字6763個和非漢字圖形字符682個,採用兩個字節對字符集進行編碼,並向下兼容ASCII編碼方式。簡言之,整個字符集分成94個區,每區有94個位,分別用一個字節對應表示相應的區和位。
  • 自製漢字取模軟體,學嵌入式的要看
    今天晚上讀了一下漢字編碼和點陣的文章做程序如下。希望對無協嵌入式開發有幫助在計算機中英文一般使用 ASCII 碼來表示,而漢字編碼使用的是擴展 ASCII 碼,用兩個ASCII碼來表示一個漢字。一個ASCII碼佔用一個字節,所有在存儲時英文是佔用一個字節,而漢字佔用兩個字節。
  • 字符編碼那些事:Unicode與UTF-8(見過但沒懂過,說的就是你)
    1、背景ASCII碼我們都聽說過:最早只有127個字符被編碼到計算機裡,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97。所以,ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼通常是2個字節。
  • ASCII、ANSI、GB2312、GBK、UNICODE、UTF-8 五種編碼的簡介
    一、ASCII 碼ASCII:"American Standard Code for Information Interchange",叫做 "美國信息交換標準碼"。所有數據存儲在計算機內都是以一個二進位的字符串表達的。每個二進位位(bit)有 0 和 1 兩種狀態。
  • 農民發明家和「漢字多用編碼」
    》、《編碼漢字學習機》、《計算機中文手寫輸入和識別方法》等10項發明的專利申請已被國家知識產權局受理。2003年12月,他因此被甘肅省人事廳和科技廳評為「甘肅省專利工作先進個人」。  2006年底,天水市科技局資助邵德子2萬元,鼓勵他進行《邵氏漢字多用編碼》的研究工作。目前,《邵氏漢字多用編碼》的計算機編程軟體和出書工作正在進行當中。  四角號碼觸動發明神經  日前,記者來到秦安縣郭嘉鎮邵咀村邵德子老人家。
  • ASCII碼中隱藏著的秘密
    人們為了將各種信息交給計算機去處理,會對這些信息進行編碼,得到「么零碼」。不同類型的信息在不同的應用場合中會使用不同的編碼方法得到不同格式的代碼,為了便於表示這種種不同的代碼,於是人們就用編碼的方法來對這些代碼命名。
  • 科普:Python編碼的前世今生
    但是計算機進入中國不得不面臨的一個問題就是字符編碼,雖然咱們國家的漢字是人類使用頻率最多的文字,漢字博大精深,常見的漢字就有成千上萬,這已經大大超出了ASCII編碼所能表示的字符範圍了,即使是EASCII也顯得杯水車薪,於是聰明的中國人自己弄了一套編碼叫 GB2312,又稱GB0,1981由中國國家標準總局發布。GB2312編碼共收錄了6763個漢字,同時它還兼容ASCII。
  • 給妹子講python-S01E08理清python中的字符編碼方法
    其中文本字符串類型被命名為str,內部採用Unicode字符集(兼容ASCII碼),而字節字符串則直接用來表示原始的字節序列(用print函數來列印字節字符串時,若字節在ascii碼範圍內,則顯示為ascii碼對應的字符,其餘的則直接顯示為16進位數),該類型被命名為bytes。
  • Python 2.x 字符編碼終極指南
    但僅了解這篇文章的內容,並不能幫我們在日常編程中躲過一些字符編碼相關的坑,Stackoverflow 上就有大量編碼相關的問題,比如 1,2,3。本文首先嘗試對編碼、解碼進行一個宏觀、直觀的解讀,然後詳細來解釋 python2 中的str和unicode,並對常見的UnicodeEncodeError 和 UnicodeDecodeError 異常進行剖析。