http响应是用asp.net C#编写的
Response.Clear(); Response.Buffer = true; Response.ContentType = "text/comma-separated-values"; response.addheader("Content-disposition","attachment;filename=\"InventoryCount.csv\""); Response.RedirectLocation = "InventoryCount.csv"; Response.ContentEncoding = Encoding.UTF32;//works on Excel wrong in iPad //Response.ContentEncoding = Encoding.UTF8;//works on iPad wrong in Excel Response.Charset = "UTF-8";//tried also adding Charset just to see if it works somehow,but it does not. EnableViewState = false; NMDUtilities.Export oUtilities = new NMDUtilities.Export(); Response.Write(oUtilities.DataGridToCSV(gvExport,",")); Response.End();
我唯一猜到的是iPad无法读取UTF32,是真的吗?如何在iPad上查看来源?
UPDATE
我刚做了一个有趣的发现.当我的编码是UTF8时,iPad上的工作正常并且字符显示正确,但Excel会弄乱一个字符.但是当我使用UTF32时,反之亦然. iPad没有显示任何内容,但Excel完美运行.我真的不知道我能做些什么.
iPad UTF8输出=“Quattrode®”
Excel UTF8输出=“Quattrode®”
iPad UTF32输出=“”
Excel UTF32输出=“Quattrode®”
这是我对DataGridToCsv的实现
public string DataGridToCsv(GridView input,string delimiter) { StringBuilder sb = new StringBuilder(); //iterate Gridview and put row results in stringbuilder... string result = HttpUtility.HtmlDecode(sb.ToString()); return result; }
UPDATE2 Excel is barfing on UTF8>:{.人.我只是解开了他列出的第二个选项,因为它在iPad上不起作用.我不能因为失败而获胜.
UPDATE3Per你的建议我看了十六进制代码.没有BOM,但文件布局之间存在差异.
UTF84D 61 74 65(MATE来自第一个单词MATERIAL)
UTF324D 00 00 00(来自第一个单词MATER的M)
因此,看起来UTF32以32位为单位,而UTF8以8位进行处理.我想这就是Excel可以猜到的原因.现在我将尝试您建议的修复程序.
解决方法
原因是记事本在文件的开头放置了正确的byte order mark(EF BB BF for UTF-8).您可以使用十六进制编辑器或其他方法自行尝试创建包含的文件
EF BB BF 20 51 75 61 74 74 72 6F 64 65 C2 AE 20
并在Excel中打开该文件. (我使用的是Excel 2010,但我认为它适用于所有最新版本.)
尝试确保输出以前3个字节开头.
如何在C#中编写BOM
byte[] BOM = new byte[] { 0xef,0xbb,0xbf }; Response.BinaryWrite(BOM);//write the BOM first Response.Write(utility.DataGridToCSV(gvExport,"));//then write your CSV
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。