c# 中文乱码

今天写代码出现了一个错误,就是string类型的变量显示的结果是一个乱码(姹夊瓧1234),就把这个乱码放在windows的文本编辑器的下面,当前的是ansi,将编码格式转为utf8以后变为(汉字1234),(如果是utf8转为ansi会是 濮瑰鐡?234)。我就觉得是需要将这个string由ansi的格式转为utf8就好了,结果在网上搜索了许多的ansi转utf8的算法,有的还直接给出了函数,结果没一个有用的,尴尬了。后来去专门看encoding的资料,在知乎上发现了这个关键:

如果是为了跨平台兼容性,只需要知道,在 Windows 记事本的语境中:

  • 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码。[1]
  • 所谓的「Unicode」指的是带有 BOM 的小端序 UTF-16。[2]
  • 所谓的「UTF-8」指的是带 BOM 的 UTF-8。[3]

 

而简体中文环境就是gbk;也就是搞错了只需要将string以gbk的编码,转为utf8的编码就可以了。

  public static string get_uft8(string unicodeString)
        {
            string keyword;
            byte[] buffer = Encoding.GetEncoding("GB2312").GetBytes(unicodeString);
            keyword = Encoding.UTF8.GetString(buffer);
            return keyword;

//下面几个是我尝试其他的转换,没有用
            //byte[] utf8 = Encoding.UTF8.GetBytes(unicodeString);
            //string s3 = ""; string s3d = "";
            //foreach (byte b in utf8)
            //{
            //    //s3 += Convert.ToString(b, 16) + " ";
            //    s3 += string.Format("{0:X2}", b);
            //    s3d += b + " ";
            // //   toolTip1.SetToolTip(textBox6, s3d);
            //}

            //return s3;

            //try
            //{
            //    Encoding gb2312  = Encoding.UTF8;
            //    Encoding utf8 = Encoding.GetEncoding("GBK");
            //    byte[] unicodeBytes = gb2312.GetBytes(unicodeString);
            //    Console.WriteLine(unicodeBytes);
            //    byte[] asciiBytes = Encoding.Convert(gb2312, utf8, unicodeBytes);
            //    Console.WriteLine(asciiBytes);
            //    char[] asciiChars = new char[utf8.GetCharCount(asciiBytes, 0, asciiBytes.Length)];

            //    utf8.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);

            //    string result = new string(asciiChars);
            //    return result;
            //}
            //catch
            //{
            //    return "";
            //}
            //string keyword;
            //byte[] buffer = Encoding.Unicode.GetBytes(unicodeString);
            //Encoding.Convert(Encoding.UTF8,Encoding.Unicode,buffer);
            //keyword = Encoding.GetEncoding("GB2312").GetString(buffer);

            //UTF8Encoding utf8 = new UTF8Encoding();
            //Byte[] encodedBytes = utf8.GetBytes(unicodeString);
            //String decodedString = utf8.GetString(encodedBytes);
            //return decodedString;
        }

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值