解决方案 »

  1.   

    是乱码对吗?
    /// <summary>
            /// GB2312转换成UTF8
            /// </summary>
            /// <param name="text"></param>
            /// <returns></returns>
            public static string gb2312_utf8(string text)
            {
                //声明字符集   
                System.Text.Encoding utf8, gb2312;
                //gb2312   
                gb2312 = System.Text.Encoding.GetEncoding("gb2312");
                //utf8   
                utf8 = System.Text.Encoding.GetEncoding("utf-8");
                byte[] gb;
                gb = gb2312.GetBytes(text);
                gb = System.Text.Encoding.Convert(gb2312, utf8, gb);
                //返回转换后的字符   
                return utf8.GetString(gb);
            }        /// <summary>
            /// UTF8转换成GB2312
            /// </summary>
            /// <param name="text"></param>
            /// <returns></returns>
            public static string utf8_gb2312(string text)
            {
                //声明字符集   
                System.Text.Encoding utf8, gb2312;
                //utf8   
                utf8 = System.Text.Encoding.GetEncoding("utf-8");
                //gb2312   
                gb2312 = System.Text.Encoding.GetEncoding("gb2312");
                byte[] utf;
                utf = utf8.GetBytes(text);
                utf = System.Text.Encoding.Convert(utf8, gb2312, utf);
                //返回转换后的字符   
                return gb2312.GetString(utf);
            }
      

  2.   

    如果文件中都是文本(没有二进制数据),那么大致地可以写类似这样的转换var tmp = Path.GetTempFileName();
    string s;
    using (var fr = File.OpenRead(path))
    using (var rd = new StreamReader(fr, Encoding.GetEncoding("gb2312")))
    using (var fw = File.OpenWrite(tmp))
    using (var wt = new StreamWriter(fw, Encoding.UTF8))
    {
        while (!rd.EndOfStream)
            wt.WriteLine(rd.ReadLine());
        if (!rd.EndOfStream)
            wt.Write(rd.ReadToEnd());
    }
    File.Move(tmp, path);
      

  3.   

    当然,如果文件很小,占用内存很少,你可以写成var data = File.ReadAllBytes(path);
    data = Encoding.UTF8.GetBytes(Encoding.GetEncoding("gb2312").GetString(data));
    File.WriteAllBytes(path, data);
      

  4.   

    还有GB2312 转utf8的代码
    好神奇的样子
      

  5.   


     if (radioButton1.Checked == true)
                {
                    toolStripProgressBar1.Maximum = listView1.Items.Count;
                    toolStripProgressBar1.Maximum = 0;
                    for (int i = 0; i < listView1.Items.Count; i++)
                    {
                        ///GB2312转换UTF8
                        string path = listView1.Items[i].SubItems[1].Text.ToString();
                        var data = File.ReadAllBytes(path);
                        data = Encoding.UTF8.GetBytes(Encoding.GetEncoding("gb2312").GetString(data));
                        File.WriteAllBytes(path, data);
                        toolStripProgressBar1.Value = i + 1;
                    }
                }
                else
                {
                    for (int i = 0; i < listView1.Items.Count; i++)
                    {
                        ///UTF8转换GB2312
                        string path = listView1.Items[i].SubItems[1].Text.ToString();
                        var data = File.ReadAllBytes(path);
                        data = Encoding.GetEncoding("gb2312").GetBytes(Encoding.UTF8.GetString(data));
                        File.WriteAllBytes(path, data);
                        toolStripProgressBar1.Value = i + 1;
                    }
                }
    谢谢