C# UTF8字串轉漢字

taogchan發表於2012-07-13
 最近在做網頁處理的工作,要從網路上面搜尋些評論資訊,下載到本地然後讀取。但是發現很多下載的檔案裡面的內容會變成了UTF8編碼的字串。這個UTF8編碼的字串不是指檔案內容的編碼是UTF8,而是他顯示出來的東西是UTF8編碼形式的字串,也就是說我們開啟看到的是如:\u9648\u8001\u5e08\u597d\uff0c\u5f53\u524d\u6211\u56fd\u6b63\u5904\u5728,這樣的內容。

    為了把他轉會對應的漢字,上網找了很多,但是都是js指令碼的。於是我自己寫了個C#的轉換類。

    ///


    /// UTF8字串轉換為漢字用的類
    /// 轉換如""之類的字串為對應的漢字
    ///

    class UTF8String
    {
        string m_strContent = "";

        ///


        /// 建構函式
        ///

        /// 要轉換的字串
        public UTF8String(string content)
        {
            m_strContent = content;
        }

        public string getContent()
        {
            return m_strContent;
        }

        ///


        /// 轉換函式
        ///

        /// 返回轉換好的字串
        public string ToString()
        {
            string reString = null;
            char[] content = m_strContent.ToCharArray(); //把字串變為字元陣列,以進行處理
            for (int i = 0; i < content.Length; i++) //遍歷所有字元
            {
                if (content[i] == '\\') //判斷是否跳脫字元 \
                {
                    switch (content[i + 1]) //判斷跳脫字元的下一個字元是什麼
                    {
                        case 'u': //轉換的是漢字
                        case 'U':
                            reString += HexArrayToChar(content, i + 2); //獲取對應的漢字
                            i = i + 5;
                            break;
                        case '/': //轉換的是 /
                        case '\\': //轉換的是 \
                        case '"':
                            break;
                        default: //其它
                            reString += EscapeCharacter(content[i + 1]); //轉為其它型別字元
                            i = i + 1;
                            break;
                    }
                }
                else
                    reString += content[i]; //非跳脫字元則直接加入
            }
            return reString;
        } 


        ///


        /// 字元陣列轉對應漢字字元
        ///

        /// 要轉換的數字
        /// 起始位置
        /// 對應的漢字
        private char HexArrayToChar(char[] content, int startIndex)
        {
            char[] ac = new char[4];
            for (int i = 0; i < 4; i++) //獲取要轉換的部分
                ac[i] = content[startIndex + i];
            string num = new string(ac); //字元陣列轉為字串
            return HexStringToChar(num);
        }


        ///


        /// 跳脫字元轉換函式
        /// 轉換字元為對應的跳脫字元
        ///

        /// 要轉的字元
        /// 對應的跳脫字元
        private char EscapeCharacter(char c) {
            char rc;
            switch (c)
            {
                case 't':
                    c = '\t';
                    break;
                case 'n':
                    c = '\n';
                    break;
                case 'r':
                    c = '\r';
                    break;
                case '\'':
                    c = '\'';
                    break;
                case '0':
                    c = '\0';
                    break;
            }
            return c;
        }


        ///


        /// 字串轉對應漢字字元
        /// 只能處理如"8d34"之類的數字字元為對應的漢字
        /// 例子:"9648" 轉為 '陳'
        ///

        /// 轉換的字串
        /// 對應的漢字
        public static char HexStringToChar(string content)
        {
            int num = Convert.ToInt32(content, 16);
            return (char)num;
        }


        ///


        /// 把string轉為UTF8String型別
        ///

        ///
        ///
        public static UTF8String ValueOf(string content)
        {
            string reString = null;
            char[] ac = content.ToCharArray();
            int num;
            foreach (char c in ac)
            {
                num = (int)c;
                string n = num.ToString("X2");
                if (n.Length == 4)
                    reString += "" + n;
                else
                    reString += c;
            }
            return new UTF8String(reString);
        }


    }

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

相關文章