C#全形和半形轉換

iDotNetSpace發表於2009-07-13

在計算機螢幕上,一個漢字要佔兩個英文字元的位置,人們把一個英文字元所佔的位置稱為"半形",相對地把一個漢字所佔的位置稱為"全形"。在漢字輸入時,系統提供"半形"和"全形"兩種不同的輸入狀態,但是對於英文字母、符號和數字這些通用字元就不同於漢字,在半形狀態它們被作為英文字元處理;而在全形狀態,它們又可作為中文字元處理。半形和全形切換方法:單擊輸入法工具條上的 按鈕或按鍵盤上的Shift+Space鍵來切換。 
(1)全形--指一個字元佔用兩個標準字元位置。
漢字字元和規定了全形的英文字元及國標GB2312-80中的圖形符號和特殊字元都是全形字元。一般的系統命令是不用全形字元的,只是在作文書處理時才會使用全形字元。
(2)半形--指一字元佔用一個標準的字元位置。
通常的英文字母、數字鍵、符號鍵都是半形的,半形的顯示內碼都是一個位元組。在系統內部,以上三種字元是作為基本程式碼處理的,所以使用者輸入命令和引數時一般都使用半形。
B 全形與半形各在什麼情況下使用?
全形佔兩個位元組,半形佔一個位元組。
半形全形主要是針對標點符號來說的,全形標點佔兩個位元組,半形佔一個位元組,而不管是半形還是全形,漢字都還是要佔兩個位元組。
在程式設計序的原始碼中只能使用半形標點(不包括字串內部的資料)
在不支援漢字等語言的計算機上只能使用半形標點(其實這種情況根本就不存在半形全形的概念)
對於大多數字體來說,全形看起來比半形大,當然這不是本質區別了。
C 全形和半形的區別
全形就是字母和數字等與漢字佔等寬位置的字。半形就是ASCII方式的字元,在沒有漢字輸入法起做用的時候輸入的字母數字和字元都是半形的。
在漢字輸入法出現的時候,輸入的字母數字預設為半形,但是標點則是預設為全形,可以通過滑鼠點選輸入法工具條上的相應按鈕來改變。
D 關於“全形”和“半形”:
全形:是指中GB2312-80(《資訊交換用漢字編碼字符集·基本集》)中的各種符號。
半形:是指英檔案ASCII碼中的各種符號。

        /// 轉全形的函式(SBC case)
        ///
        ///任意字串
        ///全形字串
        ///
        ///全形空格為12288,半形空格為32
        ///其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
        ///
        public static String ToSBC(String input)
        {
            // 半形轉全形:
            char[] c = input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i] == 32)
                {
                    c[i] = (char)12288;
                    continue;
                }
                if (c[i] < 127)
                    c[i] = (char)(c[i] + 65248);
            }
            return new String(c);
        }

        /**/
        // /
        // / 轉半形的函式(DBC case)
        // /
        // /任意字串
        // /半形字串
        // /
        // /全形空格為12288,半形空格為32
        // /其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
        // /
        public static String ToDBC(String input)
        {
            char[] c = input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i] == 12288)
                {
                    c[i] = (char)32;
                    continue;
                }
                if (c[i] > 65280 && c[i] < 65375)
                    c[i] = (char)(c[i] - 65248);
            }
            return new String(c);
        }

        [TestMethod]
        public void DBCTEST()
        {
            string strSBC = "中華1259test";
            string result = ToDBC(strSBC);
            Console.WriteLine(result);
            Assert.AreEqual(result,"中華1259test");
        }

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-608975/,如需轉載,請註明出處,否則將追究法律責任。

相關文章