C# 将逗号分隔的文件保存为txt,获取奇怪字符
我正在从SQL数据库中检索数据,并使用Web应用程序作为开发环境将“.txt”保存为逗号分隔的文件。 我唯一的问题是在第一列的开头添加了一些垃圾字符 例如¼日期、时间 尝试使用C# 将逗号分隔的文件保存为txt,获取奇怪字符,c#,asp.net,export-to-excel,C#,Asp.net,Export To Excel,我正在从SQL数据库中检索数据,并使用Web应用程序作为开发环境将“.txt”保存为逗号分隔的文件。 我唯一的问题是在第一列的开头添加了一些垃圾字符 例如¼日期、时间 尝试使用Encoding.ASCII和newUTF8Encoding(false)但解决了该错误 但其余的数据是完美的。下面的代码是用于保存数据的代码 System.IO.StringWriter sWriter; System.Text.StringBuilder sb = new System.
Encoding.ASCII
和newUTF8Encoding(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();
System.IO.StringWriter sWriter;
System.Text.StringBuilder sb=新的System.Text.StringBuilder();
sWriter=新系统IO.StringWriter(sb);
字符串Str;
对于(int k=0;k<(grdGridView.Columns.Count);k++)
{
if(k==(grdGridView.Columns.Count)-1)
Write(grdGridView.HeaderRow.Cells[k].Text);
其他的
Write(grdGridView.HeaderRow.Cells[k].Text+“,”;
}
sWriter.WriteLine(“”);
对于(int i=0;i<(grdGridView.Rows.Count);i++)
{
对于(int j=0;j<(grdGridView.Columns.Count);j++)
{
Str=(grdGridView.Rows[i].Cells[j].Text.ToString());
如果(Str==“”)
Str=“”;
如果(j!=(grdGridView.Columns.Count)-1)
{Str=(Str+“,”);}
sWriter.Write(Str);
}
sWriter.WriteLine();
}
sWriter.Close();
//将文件直接下载到Web服务器
//字符串HtmlInfo=sWriter.ToString().Trim();
字符串HtmlInfo=sWriter.ToString();
字符串DocFileName=fileName1+“.txt”;
字符串FilePathName=Server.MapPath(“~/Download”);
FilePathName=FilePathName+“\\”+DocFileName;
File.Delete(文件路径名);
FileStream Fs=newfilestream(FilePathName,FileMode.Create);
BinaryWriter BWriter=新的BinaryWriter(Fs,Encoding.GetEncoding(“UTF-8”);
b编写器写入(HtmlInfo);
b编写器关闭();
Fs.Close();
尝试Encoding.ASCII而不是.GetEncoding(“UTF-8”)前导字符是unicode
您可以使用新UTF8Encoding(false)
而不是Encoding.GetEncoding(“UTF-8”)
来禁用BOM的输出
在这里使用二进制编写器没有什么意义。您看到的字符是由BinaryWriter预先填充到字符串的字符
改用文本编写器,或者将sWriter的内容作为
字节[]
@HenkHolterman我错了,你是对的:它是一个。当我看到GetEncoding(“UTF-8”)
和“我的文件开头有垃圾”后,我就跳了起来,甚至没有注意到它是一个BinaryWriter
!
string HtmlInfo = sWriter.ToString();
....
BinaryWriter BWriter = ...
BWriter.Write(HtmlInfo);