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;
        }

猜你喜欢

转载自blog.csdn.net/U201414786/article/details/84278018
今日推荐