問:輸入法為什麼有全形半形之分
這要從發展史說起:
1. 二進位制
計算機普遍遵循馮諾依曼結構體系,它規定了計算機內部以二進位制為主要數制(這和電路有關),所以計算機只認識二進位制的0或1。其它符號比如十進位制的[2-9],字母[a-za-z],標點符號,中文等等是不認識的。那麼,當我們說"a"的時候,它是怎麼理解的呢?
2. 編碼表
即然計算機只認識01符號,那我們就可以建立一套"對映系統",比如
a <--> 00000001
b <--> 00000010
c <--> 00000011
當我們說"a"的時候,計算機就理解為"00000001",即乙個符號,用一串唯一的二進位制表示,這套"對映系統"就稱為編碼表。
3. ascii編碼表
因為早期的計算機只在發達的歐美國家使用,所以這套"對映系統"是根據英文規則設計的,叫ascii表,規定用8位長度的二進位制表示乙個字元,最多可以表示 2^8 = 256 個字元。ascii表涵蓋了英文本母,數字,和常用的英文符號,比如",.+-"等,
可普通漢字就有6萬多個,很明顯8位的ascii編碼方案滿足不了中文系統的要求,比如中文 "啊"就無法用ascii表示。
4. 中文編碼表
由上我們知道,只要再設計一套
長度更大
的"對映系統"就可以解決問題了,比如
啊 = 00000000 00000001
哦 = 00000000 00000010
即使用16位二進位制(兩位元組)表示乙個漢字,最多可表示 2^16 = 65536 個。
早期中文系統設計的時候,是用gb2312標準,但這套標準有部分的漢字,符號,少數民族用語是沒有對映過去的,比如在gb2312中就打不出「鎔"字,所以往後就出了編碼範圍更大的編碼表,如gbk,gb18030。這些編碼表只有乙個區別,就是能表示的漢字或符號範圍越來越大了,但相應的,需要對映的二進位制位數也越來越大了,即漢字可能需要用2-4位位元組(16-32位二進位制)表示,儲存成本增加了。
5. 全形與半形
綜上,我們知道
5.1計算機只認識二進位制01,所有的字形符號都是通過編碼表(對映系統)翻譯實現的
5.2在英文系統的編碼表裡,有用一位元組表示的標點符號,如英文逗號","
5.3在中文系統的編碼表裡,有用n(1-4)位元組表示的標點符號,如中文逗號",」
語義上我們統稱為逗號,但計算機實際表現形式是不同的
英文逗號"," 在ascii規則下是 00101100,一位元組長,螢幕列印寬度是乙個寬度
中文逗號"," 在gbk規則下是 10100011 10101100,兩位元組長,螢幕列印寬度是兩個寬度
半形就是指 ascii 編碼表以內的標點符號,它們都是佔乙個位元組,乙個列印寬度的
全形就是指在ascii編碼表以外,如gbk,big5, unicode等編碼規則下的,多位元組的標點符號,螢幕列印寬度通常是兩個寬度,即乙個漢字寬度。
簡言之,ascii以內的就叫半形符號,以外的就叫全形符號。
6. 回答樓主問題
為什麼中文輸入法會提供全形半形切換的功能,主要目的我猜是這樣的
1. 中文編碼表 (gb2312/gbk..) 向下相容ascii,但出現了符號衝突,比如有英文逗號,和中文逗號,當使用者想輸入逗號時,不知道該給出ascii表內的逗號,還是中文編碼表中的逗號。有了全形和半形,使用者就可以自己選擇,而不用切換成其它輸入法了。
2. 中文對齊與美觀
3. 儲存成本,半形只佔一位元組,全形佔多位元組
輸入法的全形和半形區別?
全月亮是全形,半個月亮是半形 全形佔兩個位元組,半形佔乙個位元組。半形全形主要是針對標點符號來說的,全形標點佔兩個位元組,半形佔乙個位元組,而不管是半形還是全形,漢字都還是要佔兩個位元組 在程式設計序的源 中只能使用半形標點 不包括字串內部的資料 在不支援漢字等語言的計算機上只能使用半形標點 其實這...
對輸入法中全形半形和中英文輸入法的理解
之所以有這樣的區別,簡單說就是中文系統用雙位元組顯示漢字造成的與世界標準 由美國制訂的 不一的問題。說白了,對我們來說就是只針對中文的字型檔才有全形半形的說法。1 全形 漢字字元和規定了全形的英文本元及國標gb2312 80中的圖形符號和特殊字元都是全形字符。全形字符在編碼上佔兩個位元組的寬度。國標...
輸入法中的全形和半形對編譯的影響
今天出現了乙個奇怪的現象,不小心把輸入法改成全形了,在 中敲入空格鍵,然後就報錯。後來我查了一下什麼是全形和半形 1 全形 指乙個字元占用兩個標準字元位置。漢字字元和規定了全形的英文本元及國標gb2312 80中的圖形符號和特殊字元都是全形字符。一般的系統命令是不用全形字符的,只是在作文書處理時才會...