web 汇出EXCEL乱码,因为没有BOM

web汇出的EXCEL乱码

问题描述
汇出的EXCEL档案,如果很多笔,OK.
但若汇出的资料只有一笔,就会有中文乱码的情况
而EXCEL乱码的档案,如果用记事本打开中文能正常显示.用记事本开,查看它的编码为utf8.

-- | ----
用记事本开| 正常显示
用EXCEL开| 乱码
查看记事本编码| utf-8

原因
因为没有BOM,但为什么一笔没有BOM,多笔就有BOM,不得而知.

解决方法
所以我们就要让它有BOM.
怎么让它有BOM,我们可以用stream,stream指定UTF8的话,就会自动加上BOM了.
ref
https://blog.darkthread.net/blog/csv-encoding-again/

加上stream后的程式码如下(DataGrid)

Response.ClearContent();
Response.Clear();
Response.Buffer=true;
Response.Charset ="UTF-8"; //设定字集
Response.ContentEncoding = System.Text.Encoding.UTF8;//表格内容新增编码格式

    string sFilename = HttpUtility.UrlEncode("中文", System.Text.Encoding.UTF8);//处理中文档名乱码            Response.AppendHeader("Content-Disposition","attachment;filename="+sFilename+".xls");     Response.ContentType = "application/ms-excel "; //内容型态设为Excel     this.EnableViewState = false; //把ViewState给关了    System.IO.StringWriter objStringWriter = new  System.IO.StringWriter();    System.Web.UI.HtmlTextWriter objHtmlTextWriter = new System.Web.UI.HtmlTextWriter(objStringWriter);    this.DataGrid1.RenderControl(objHtmlTextWriter);  //get画面上的资料    System.IO.StreamWriter sw =new System.IO.StreamWriter(Response.OutputStream,System.Text.Encoding.UTF8);//这样一笔的时侯,就不会乱码了    sw.Write(objStringWriter.ToString());    sw.Close();     Response.End();

目前已知2种function可以加上BOM,File.WriteAllText 和 StreamWriter.
使用方式大概有2种,一种指定字码,一种不指定.
指定字码,也可设定不产生BOM.

状态File.WriteAllTextStreamWritermemo没指定没BOM没BOMFile.WriteAllText("B:\F1.csv", '中文');指定但不想有BOM----new StreamWriter (strPath,false,utf8);指定有BOM有BOMFile.WriteAllText("B:\F1.csv", '中文', Encoding.UTF8);

*StreamReader 预设会先自动判断档案编码,无法确认才会使用设定的编码。
所以如果不需要BOM的话,不指定也没关係.
ref
https://blog.darkthread.net/blog/write-utf8-file-with-bom/

而Stream加上BOM,writer和reader之间,是怎么运行的呢?

classabout BOMabout EncodingStreamWriter写的时侯, 会把BOM加进来预设会先自动判断档案编码,无法确认才会使用设定的编码StreamReader读的时侯, 会把BOM自动滤掉stream指定的编码错误,却可以正常写入,怎么回事,快点我,知道更多

----以下是坑.读者请自行略过

用它开BOM没BOM记事本OKOKEXCELOK乱码

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章