中文輸入法為什麼會有全形和半形的區別?

時間 2021-05-05 22:48:57

1樓:cx12

傳統上,在西歐語系使用的計算機系統中,每乙個字母或符號使用1個位元組的空間,而1個位元組由8位元(bit)組成,因此共有28=256個編碼空間,這對西歐語系的字元足夠用了;但是對於漢語、日語及韓語文字,由於其數量遠遠超過256個,故慣常使用兩位元組來儲存乙個字元,為了使字型看起來齊整,英文本母、數字及其他符號,也由原來只佔1個字空間,改為用2個字的空間來顯示,並用2個位元組來儲存。所以,中、日、韓等文字沒有半形之說,統一為全形字符。相比起來,英文本母、數字及其他西歐符號用1個位元組表示就是半形,用2個位元組表示就是全形

2樓:桑丘

符號衝突是主要原因

有些數字或符號是有衝突的,比如英文逗號","與中文逗號",",用眼睛就可以看出長度與大小是不一樣的。當在鍵盤上輸入逗號時,中文輸入法不確定你想要的是哪種逗號(中/英),所以就提供了全形半形模式,英文半形輸出英文逗號,其它模式就是中文逗號,這樣,我們用一種輸入法就能打出兩種符號,而不用切換成其它輸入法。

更細緻的原因要從以下各點說起:

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以內的就叫半形符號,以外的就叫全形符號。

3樓:汪芳芳

這個問題由計算機程式設計人員來回覆比較好。

全形和半形的區別很簡單:全形的標點符號佔2個位元組,半形的標點符號佔1個位元組。

從這個區別入手來分析用途,就會容易get到存在的理由。

作為乙個中文系,不深究計算機系統的人從這幾個角度考慮:

1、全形符號是源於漢字,半形符號是源於英文系統、web運用;

2、既然是web運用,那麼電腦伺服器端預設的是英文系統,對於半形輸入法的運用就比全形的多;

3、以前的程式設計人員習慣於切換全形半形輸入法,這個使用上的過渡可能會延續一段時間。

以上僅為外圍看熱鬧的考量,求輕噴。

4樓:

「全形」與「半形」兩個術語應該都是從日本來的。印刷上縱橫比為1:1的字元(塊)稱為全形,其

四、三、二分之一分別稱作「四分」、「三分」、「二分」。

文書處理電子化之後,JIS C 6220 標準將所有片假名編入 ASCII 未用的單位元組高位(同時對低位的幾個字元做了修改,比如 backslash,這就是為什麼早期 Windows 上裝日文遊戲的時候路徑分隔符會變成日元符號)。所有這些符號在早期的點陣顯示器上有 8 畫素的寬度就可以得到很好的效果了。

為了裝入漢字,編碼必須使用兩個位元組,而顯示起來,8 畫素捉襟見肘,16 畫素是最簡單也是最貼合雙位元組編碼的選擇。這樣一來,英文本元恰好在編碼和顯示時都是漢字的一半。

JIS X 4051《日本語文書の組版方法》裡面,將全形定義為「漢字一文字的外框」,半形定義為「字寬為全形二分之一的文字之外框」。

至於為什麼全形字符會有英文,我個人猜測是為了豎排,或者漢字必須行列對齊的其他情形。

詳情請參閱 http://

ja.wikipedia.org/wiki/%

E5%85%A8%E8%A7%92%E3%81%A8%E5%8D%8A%E8%A7%92

5樓:

以前是比例字型不成熟的時候,在等寬字型的輸入場合,為了讓英文本母佔據和中文字母同樣大小的空間,顯得美觀。

現在呢,多數時候是沒什麼必要了,是不是有些生僻的場合還有必要,比如ASCII畫?我猜多數就是個習慣吧。

6樓:梁海

這些全形符號似乎是雙位元組中文編碼的歷史遺留問題。當年在純文字的介面中,為了讓西文和中日韓的方塊字對齊,就讓西文字母、數字和標點也占用乙個漢字的視覺空間,並且使用 2 個位元組儲存。

後來,其中的一些全形字符因為比較有用,就得到了廣泛應用(比如全形的逗號「,」、問號「?」、感嘆號「!」、空格「 」等),專用於中日韓文字,成為了標準的中日韓標點字元。

而其它的許多全形符號失去了價值(我們現在很少需要讓純文字的中文和西文字字對齊了),就很少再用了。

另外需要說明的是:

現在全球文字編碼的事實標準是 UTF-8 等基於 Unicode 的編碼。Unicode 吸納了許多遺留(legacy)編碼,並且為了相容性而保留了所有字元。所以這些沒什麼用的全形字符也留下來了。

而國家標準也仍在要求字型和軟體支援這些全形字符。

不過,半形和全形字符的關係在 UTF-8 等編碼中不再是簡單的 1 位元組和 2 位元組的關係了。

如何解決VSCode Vim中文輸入法切換問題?

犇犇 改進 autohot key 方案 只用一種輸入法,其中輸入法中英可切換,這裡我用 限定在vscode 程式裡面發揮作用 IfWinActive ahk exe Code.exe vscode 的exe 名字叫做Code.exe global MyVar 0 Esc if MyVar 0 se...

Linux系統中文輸入法fcitx與ibus哪個好,哪個更先進?

eddystorm linux 中文輸入法不要說好不好用,安裝配置就到處是坑,linux 大多開發者是拉丁語系的,他們對這個都不是很上心。桌面 linux 不只是輸入法,還有其他很多的軟體和系統配置,都是終端搞一波,又要到 GUI 裡設定一波,軟體商店也都做得不好,常常還是要用終端安裝,體驗很割裂。...

iPad最好用的中文輸入法是哪個?

之所以來搜這個話題,是因為我在手機上搜狗輸入法用習慣了,用iPad上自帶的輸入法,總是把enter鍵當退格鍵用,每次都把錯字發出來很煩躁啊這種感覺 我用的是12.9寸的iPad pro,主要用的還是雙手打字。所以我就用了自帶的。自帶的介面簡潔明瞭,也沒有廣告,識別率還是挺高的。點錯的情況很少出現。就...