C# UTF8字符串转汉字

 最近在做网页处理的工作,要从网络上面搜索些评论信息,下载到本地然后读取。但是发现很多下载的文件里面的内容会变成了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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22392018/viewspace-735412/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值