两种方法都有问题using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".") + ";Extended Properties='Text;'"))
{
DataTable dtTable = new DataTable(); OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [glist.csv]", conn);
try
{
adapter.Fill(dtTable);
}
catch (Exception ex)
{
dtTable = new DataTable();
}
this.gvExcel.DataSource = dtTable;
gvExcel.DataBind();
}问题是出来的直接是乱码,所以得放弃StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("gb2312"));
....
while (str != null)
{
str = reader.ReadLine();
if ((str != null) && (str.Length > 0))
{... str = reader.ReadLine(); 这里监视了下结果不对,因为淘宝的csv有个字段是详情,很巨大,这里直接断开了。求教还有什么简单的方法读取么
{
DataTable dtTable = new DataTable(); OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [glist.csv]", conn);
try
{
adapter.Fill(dtTable);
}
catch (Exception ex)
{
dtTable = new DataTable();
}
this.gvExcel.DataSource = dtTable;
gvExcel.DataBind();
}问题是出来的直接是乱码,所以得放弃StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("gb2312"));
....
while (str != null)
{
str = reader.ReadLine();
if ((str != null) && (str.Length > 0))
{... str = reader.ReadLine(); 这里监视了下结果不对,因为淘宝的csv有个字段是详情,很巨大,这里直接断开了。求教还有什么简单的方法读取么
使用OLEDB对象链接读取
淘宝CSV格式
StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("gb2312"));换成
StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("unicode"));
或者
StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("utf-8"));
试试呢
我换了新的方法 stringReader.Peek() 和 (char)stringReader.Read(); 一个个字符读取并判断后处理。目前显示是暂时没问题。虽然感觉性能很差,拆成了N个字符判断
你仔细看看应该是内容里面有回车换行符号,这样就会导致readline读不到结尾,这时候就要根据csv协议来处理了,CSV协议:
1,逗号分隔字段,回车换行分隔记录,字段两边的空格去掉。
2,如果字段内容有逗号,回车换行符号,则使用双引号括起整个字段。
3,如果被括起来的字段有双引号,则需要使用两个连续的双引号来表示。
private void ListToCsv(string column, string fileName, int beginIndex, int endIndex, string fileType)
{
MemberParam param = GetValueByUrlParam();
param.PageSize = endIndex;
PagedList<Member> list = service.GetMemberPagedList(param);
if (list == null)
return;
if (list != null)
{
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
curContext.Response.Clear();
if (endIndex <= 0 || endIndex > list.TotalCount)
endIndex = list.TotalCount;
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
curContext.Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(column, Encoding.GetEncoding("gb2312")) + "." + fileType);
curContext.Response.Flush();
StringBuilder sb = new StringBuilder();
StringBuilder sbline = new StringBuilder();
string coltmp = fileType.ToLower() == "csv" ? "\"{0}\"," : "{0},";
Member mb = new Member();
int itemp = 0;
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/App_Data/MemberFormart.xml"));
XmlNodeList xmlNodeList = doc.SelectNodes("//FileFormats/FileFormat[@TbColumn='" + column + "']/Field[@Display='True']");
foreach (XmlNode xdcolName in xmlNodeList)
sbline.Append(string.Format(coltmp, xdcolName.Attributes["Description"].Value));
if (sbline.Length == 0)
return;
sbline.ToString().Remove(sbline.Length - 1);
sb.AppendLine(sbline.ToString());
sbline.Remove(0, sbline.Length);
foreach (Member m in list.InnerList)