我正在从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 == " ")
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();
答案 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”)