将逗号分隔的文件保存为txt,得到奇怪的字符

时间:2012-09-20 06:37:49

标签: c# asp.net export-to-excel

我正在从SQL数据库中检索数据,并使用Web应用程序作为开发环境将其作为逗号分隔文件保存为“.txt”。 我唯一的问题是在第一列的开头添加了一些垃圾字符。

实施例。 ¼¤日期,时间

尝试使用Encoding.ASCII和新UTF8Encoding(false),但解决了错误。

但其余的数据是完美的。下面的代码是用于保存数据的代码。

        System.IO.StringWriter sWriter;
        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        sWriter = new System.IO.StringWriter(sb);
        string Str;

        for (int k = 0; k < (grdGridView.Columns.Count); k++)
        {
            if (k == (grdGridView.Columns.Count) - 1)
                sWriter.Write(grdGridView.HeaderRow.Cells[k].Text);
            else
                sWriter.Write(grdGridView.HeaderRow.Cells[k].Text + ","); 
        }

        sWriter.WriteLine("");

        for (int i = 0; i < (grdGridView.Rows.Count); i++)
        {

            for (int j = 0; j < (grdGridView.Columns.Count); j++)
            {

                Str = (grdGridView.Rows[i].Cells[j].Text.ToString());

                if (Str == "&nbsp;")
                    Str = "";

                if (j != (grdGridView.Columns.Count) - 1)
                { Str = (Str + ","); }

                sWriter.Write(Str);
            }
            sWriter.WriteLine();
        }
        sWriter.Close();

        // Download File Directly to Web Server
        //string HtmlInfo = sWriter.ToString().Trim();
        string HtmlInfo = sWriter.ToString();
        string DocFileName = fileName1 + ".txt";
        string FilePathName = Server.MapPath("~/Download");
        FilePathName = FilePathName + "\\" + DocFileName;
        File.Delete(FilePathName);
        FileStream Fs = new FileStream(FilePathName, FileMode.Create);
        BinaryWriter BWriter = new BinaryWriter(Fs, Encoding.GetEncoding("UTF-8"));
        BWriter.Write(HtmlInfo);
        BWriter.Close();
        Fs.Close();

3 个答案:

答案 0 :(得分:3)

主要字符是unicode Byte Order Mark

您可以使用new UTF8Encoding(false)代替Encoding.GetEncoding("UTF-8")来停用BOM的输出。

答案 1 :(得分:2)

 string HtmlInfo = sWriter.ToString();
 ....
 BinaryWriter BWriter = ...
 BWriter.Write(HtmlInfo);

使用BinaryWriter在这里没什么意义。您看到的字符是the Length-prefix,它由BinaryWriter预先添加到字符串中。

改为使用TextWriter,或将sWriter的内容作为byte[]获取。

答案 2 :(得分:1)

尝试使用Encoding.ASCII代替.GetEncoding(“UTF-8”)