從輸入法的全形、半角聊起:計算機的那些字符編碼

2021-01-12 小零哥實驗室

說起這事,就要從1952年馮諾依曼設計的計算機EDVAC說起。

EDVAC雖然不是世界上第一臺計算機,但它是第一臺採用二進位計算的現代計算機。

當時計算機只是為數學運算服務的,那時計算機還不能輸入、處理各種英文、中文等文本,更別提音頻、圖像、視頻等多媒體內容。

作為第一臺計算機的ENIAC採用的是十進位計算,所以在數學計算時不用任何轉換。

但是二進位的EDVAC卻需要使用二進位「0101」這些數字表示十進位數字,這時計算機就使用了第一種編碼——BCD碼。

BCD碼是用4位二進位數來表示十進位數中的0到9這10個數中的任意一位。比如8421 BCD碼0010表示2,0100表示4。

那麼什麼是編碼呢?

之所以出現編碼,原因就是計算機內部是各種高低電壓信號,這些高低電壓信號被人類形象記憶為「0101」等二進位數。

從這裡就可以看出計算機是不識別人類信息的,它只是根據科學家對其內部電路的設計,將一堆高低電壓信號轉換為另一堆高低電壓信號。

當計算機對用戶輸入的十進位展開運算時,它首先使用內部電路將十進位數字轉換為自己識別的二進位數,也就是高低電壓信號,這個轉換的過程就叫做「編碼」,而轉換的標準就是編碼格式。

比如按照8421BCD編碼格式5是0101,但是換成另一種編碼格式5421BCD卻是1000。

與之相反的過程,計算機將各種高低電壓信號(二進位數)按照逆向標準轉化為人類可讀信息叫做「解碼」。

隨著計算機處技術的發展,數學運算可以通過符號進行簡單、快捷的控制了。這時計算機的輸入信息也就要求不局限於數字了,英文字母和各種符號急需被計算機識別。

這時候大家熟悉的ASCII碼就誕生了,ASCII碼將英文字母、數字、特殊符號用一個字節(8位bit)進行編碼,其中最高位是奇偶校驗位,剩下7位用於表示輸入字符,ASCII碼一共能表示128個字符。

因為ASCII碼是為了解決計算機識別美國用戶輸入字符的問題,所以當計算機進入非英語國家時,計算機就不識別所在地的輸入信息了。

這個問題對於拉丁語系的國家比較簡單,直接讓原ASCII碼的最高位也參與字符編碼,不再作為奇偶檢驗位,這樣就能表示256個符號了。

然而,當計算機進入亞洲時就表示「帶不動了」,漢字、日語、韓語裡面的字符太多了。

於是中國在1981年設計了基於ASCII編碼的GB2312編碼,「GB」是「國標」拼音首字母,GB2312使得計算機能夠識別簡體中文;big5支持繁體中文;日本使用Shift_JIS編碼讓計算機識別日文,韓國則是使用Euc-kr編碼使計算機運行韓語。

上面說過ASCII碼採用一個字節編碼,而我國的GB2312使用的是兩個字節。

由於後者是在前者之上創建的,所以對於ASCII碼中的符號、數字、英文字母等,GB2312都使用兩個字節重新編碼,此時這些符號叫做「全形」字符,而原來ASCII中的128個字符叫做「半角」字符。

對於漢字來說,全形模式和半角模式效果等同,底層也都是使用兩個字節。

但是對於英文字母、符號來說,半角、全形效果不同:半角符號採用一個字節,如字符a,編碼97,與ASCII碼一致;但是全形符號採用兩個字節,字符a編碼為65345。

從使用效果上看,當我們輸入英文,尤其是輸入網站的註冊名、密碼等信息,編寫含有英文的文檔、編程的時候,一定要使用半角符號。

鑑於半角模式能正常漢字還能正確輸入英文,所以日常生活中推薦大家使用半角模式。

GB2312的缺點是不支持繁體漢字,所以1995年在其基礎上發行了GBK編碼,「GBK」是「國標擴展」的拼音簡寫。後來又誕生了GB18030,目的是增強對我國少數民族文字的支持。

說句題外話,80年代的時候,由於內存容量較小,所以GB字符集並沒有直接存儲在計算機上,而是集成在一種叫做「漢卡」的可插拔硬體的晶片中,當它插在計算機主板ISA插槽時可以顯示中文。

下圖就是漢卡。

史玉柱的巨人漢卡、求伯君的金山漢卡、柳傳志的聯想漢卡、雷軍的漢卡創業都是這個時代關於計算機如何本地化的商業成果。

回到主線,僅僅我國就有不下三種的編碼格式,那麼世界上存在的編碼格式種類之多可想而知。

而且各個編碼之間互不兼容,很容易出現亂碼問題,比如在中國計算機內編碼33376表示漢字「俙」,一旦含該漢字的文件在日語編碼的計算機中打開就會顯示為「A」。

為了將所有語言的編碼格式統 一在一套編碼規範中,Unicode字符集出現了。

注意Unicode只是一個字符集,代表一種標準,不是編碼格式。

Unicode字符集於1994年公布,它為每種語言中的每個字符都設定了統 一併且獨一無二的二進位編碼。

Unicode規定所有字符使用十六進位數字表示,而且在書寫時在前面加上前綴「U+」,比如字母「A」的對應的數值是 0X0041,因此字符「A」使用「U+0041」表示。

由於Unicode身為字符集只是規定了符號的二進位代碼,對於如何存儲、處理並沒有規定,所以對Unicode進行實現的UTF系列編碼格式應運而生。

UTF編碼系列包括UTF-8、UTF-16和UTF-32,我們經常使用的是UTF-8。

UTF-8最低使用8bit,也就是一個字節表示一個字符,隨著字符的增加它的存儲空間也隨之增加,最高使用4個字節。

這是UTF-8和UTF-16的特點,用一種編碼存儲空間可變的方式表示一個字符。在儘量多的覆蓋不同字符的同時,減小了存儲空間。

以上就是本次科普「關於計算機字符編碼」的主要內容,如果錯誤,望批評指正!

相關焦點

  • 輸入法半角和全形的區別
    一、全形與半角的區別首先大多數朋友都明白,也是最直接的,那就是用全形型和半角型的字形狀不一樣,這種差異體現在什麼方面。先說半角,半角是我們大多數人使用打字時,如果我們不去故意半滿的角度調整,它將永遠伴隨著我們,為什麼這麼說,因為半角條件下,人們已經習慣了這種模式,半角狀態可以使用任何標點符號,空格也沒有特殊的限制。然後說全形,在全形狀態下,第一個變化是我們的空格。切換到全形狀態,按空格鍵,我們會發現兩個字符之間的距離變得非常大,這與半角狀態相比是非常大的。
  • 標點的全形和半角問題
    名偵探柯基第六十八期一般英文就用半角,中文用全形;轉:半角--指一字符佔用一個標準的字符位置。通常的英文字母、數字鍵、符號鍵都是半角的,半角的顯示內碼都是一個字節。在系統內以上三種字符是作為基本代碼處理的,所以用戶輸入命令和參數時一般都使用半角。全形與半角各在什麼情況下使用?全形佔兩個字節,半角佔一個字節。半角全形主要是針對標點符號來說的,全形標點佔兩個字節,半角佔一個字節,而不管是半角還是全形,漢字都還是要佔兩個字節。
  • QQ雲輸入法的全形/半角切換快捷鍵是什麼
    QQ雲輸入法的全形/半角切換快捷鍵是shift+ Space。  QQ雲輸入法是運用雲計算和網頁技術實現的網頁拼音輸入工具,只要能上網就能在各種網頁上面進行中文拼音輸入,而不需要裝任何輸入軟體。QQ雲輸入法會根據所有用戶的輸入習慣來調整候選詞的排列位置,實現候選詞的智能排列,提高用戶的輸入體驗。用QQ拼音2.0以上版本,或QQ五筆1.2以上版本,在登錄QQ輸入法後,開始享有QQ輸入法的等級積分服務,當用戶等級達到LV4後,具備點亮圖標的特權。  QQ雲輸入法會根據所有用戶的輸入習慣來調整候選詞的排列位置,實現候選詞的智能排列,提高用戶的 輸入體驗。
  • Excel VBA之函數篇-3.20 半角or 全形 數據格式統一很重要
    場景說明可能看見標題的時候,很多的童鞋都是懵逼的狀態的,什麼全形半角?不太了解嗎?看來如果這些童鞋的公司也有這樣的要求的話,估計就要遭殃咯,我們來看下右下角的輸入法,普遍常用的就是搜狗輸入法和QQ輸入法了,其實都是一樣的,看看截圖中的第二個圖標,就是逗號句號的那個他就是全形半角的開關,現在都是上面的黑點是藍色的,那就是全形,如果是中間是白色的,那就是半角了,那麼對於我們的輸入結果有什麼影響呢?
  • 劉堅強辦公學《新手學五筆打字》2-2 五筆輸入法的狀態欄
    圖2-2-4 編碼方案再看按鈕,狀態窗口按鈕設置,使用時這三項內容打勾就行了。我們為了講解需要把前面的輸入法名字勾選,保存(如圖2-2-5所示)。全/半角符號接下來的是一個月亮的圖形,在上面點一下變成一個太陽,月亮叫半角,太陽叫全形(如圖2-2-8所示)。
  • 位、字節、字長的概念及利用ASC函數與WIDECHAR函數進行字符轉換
    我們知道,在Excel中有半角字符和全形字符,半角字符和全形字符的區別在於所佔的字節不同,全形字符為雙字節,半角字符為單字節,一個英文的字符佔用一個字節,而一個漢字以及漢字的標點符號、字符都佔用兩個字節。
  • 賣萌不頂用 百度日文輸入法被爆有洩密風險
    日本內閣官房情報安全中心和文部科學省呼籲大學,政府機關以及研究機關等停止使用百度輸入法。百度IME在日本大約有200萬用戶,來頭可不小《讀賣新聞》表示,在12月中旬,有IT公司調查指出,百度會將使用百度日文輸入法
  • Excel Substitute函數使用方法,含嵌套一次替換多個不同字符實例
    在 Excel 中,一共有兩個替換字符的函數,一個是Substitute函數,另一個是Replace函數;前者是用新字符替換舊字符,後者是用新字符替換指定字符數。Substitute函數既可以替換源文本中所有指定字符,又可以替換某個指定字符,並且還能嵌套使用以實現一次替換多個不同字符。
  • 小編給各位網友分享一下百度輸入法AI助聊使用技巧
    百度輸入法AI助聊版本是一種在全拼輸入法基礎上加以改進的常用拼音類漢字輸入法。 百度輸入法AI助聊版本不是一種純粹的拼音輸入法,而是一種音形結合輸入法。因此在輸入拼音的基礎上如果再加上該字第一筆形狀編碼的筆形碼,就可以快速檢索到這個字。
  • 計算機基礎——什麼是編碼?
    計算機基礎--什麼是編碼?作者名:麗斯什麼是編碼編碼是信息從一種形式或格式轉換為另一種形式的過程,簡單來講就是語言的翻譯過程。我們都知道計算機使用的是機器語言即二進位碼,相信大部分人都無法流暢的閱讀二進位碼,於是為了能夠讓人類更好的理解計算機輸出的結果就需要將機器語言轉換為自然語言,比如英語、俄語和中文等。
  • 編碼解碼是什麼意思?URL 如何編碼解碼?為什麼要編碼?
    編碼解碼是什麼?編碼是信息從一種形式或格式轉換為另一種形式的過程,也稱為計算機程式語言的代碼簡稱編碼。用預先規定的方法將文字、數字或其它對象編成數碼,或將信息、數據轉換成規定的電脈衝信號。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。編碼是信息從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。
  • 企業數據編碼標準
    該類編碼只能使用數字進行編碼,一般為不定長、順序編碼。字符編碼:在信息系統中使用各種字符類數據類型進行存儲,如字符型等。字符編碼可使用漢字、字母、數字、符號進行編碼。根據編碼字符的組成,主要分為以下幾種形式:1、純字母編碼2、純數字編碼3、字母數字混合編碼符號一般用於分隔不同的編碼位段,如:「-」、「.」等。採用字母進行編碼時需要考慮信息系統是否區分字母大小寫,在編碼規則中應明確指定使用大寫還是小寫。
  • Python中字符串編碼在二進位之間相互轉換的方法
    第八十節:字符串編碼轉換在學習「計算字符串的長度」(詳見第72節內容Python中如何計算字符串的長度),對編碼的概念、分類和作用,做過一個簡單的介紹,今天的內容,還是從「編碼」開始談。1967年ASCII第一次以規範標準的類型發表以來,到今天它已經走過了53年的風雨歷程,作為一種國際通用的西文字符編碼標準,它的作用的不可忽視的,但隨著技術的發展,由於ASCII碼自身的局限性,它已逐漸被後起之秀-萬國碼「utf-8」所取代。而在漢語環境下,最適合的編碼標準,應該是我國制定的「GBK」和「GB2312」。
  • 深入剖析go中字符串的編碼問題——特殊字符的string怎麼轉byte?
    unicode和utf-8的恩怨糾葛百度百科已經把unicode和utf-8介紹的很詳細了,所以這裡就不做過多的闡述,僅摘抄部分和本文相關的定義:Unicode為每個字符設定了統一併且唯一的二進位編碼,通常用兩個字節表示一個字符。