ITPub博客

首页 > Linux操作系统 > Linux操作系统 > C# UTF8字符串转汉字

C# UTF8字符串转汉字

原创 Linux操作系统 作者:taogchan 时间:2012-07-13 14:08:07 0 删除 编辑
 最近在做网页处理的工作,要从网络上面搜索些评论信息,下载到本地然后读取。但是发现很多下载的文件里面的内容会变成了UTF8编码的字符串。这个UTF8编码的字符串不是指文件内容的编码是UTF8,而是他显示出来的东西是UTF8编码形式的字符串,也就是说我们打开看到的是如:\u9648\u8001\u5e08\u597d\uff0c\u5f53\u524d\u6211\u56fd\u6b63\u5904\u5728,这样的内容。

    为了把他转会对应的汉字,上网找了很多,但是都是js脚本的。于是我自己写了个C#的转换类。

    ///


    /// UTF8字符串转换为汉字用的类
    /// 转换如"\\u8d35"之类的字符串为对应的汉字
    ///

    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 += "\\u" + n;
                else
                    reString += c;
            }
            return new UTF8String(reString);
        }


    }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22392018/viewspace-735412/,如需转载,请注明出处,否则将追究法律责任。

上一篇: C# List 用法list<>
下一篇: 给我一个目标吧
请登录后发表评论 登录
全部评论

注册时间:2009-08-28

  • 博文量
    200
  • 访问量
    1183394