c# – 如何对Unicode进行编码,以便iPad和Excel都能理解?

c# – 如何对Unicode进行编码,以便iPad和Excel都能理解?,第1张

概述我有一个用UTF32编码的CSV.当我在IE中打开流并用Excel打开时,我可以读取所有内容.在iPad上我流式传输,我得到一个没有任何内容的空白页面. (我不知道如何在iPad上查看源代码,因此 HTML中可能存在隐藏的内容). http响应是用asp.net C#编写的 Response.Clear();Response.Buffer = true;Response.ContentTyp 我有一个用UTF32编码的CSV.当我在IE中打开流并用Excel打开时,我可以读取所有内容.在iPad上我流式传输,我得到一个没有任何内容的空白页面. (我不知道如何在iPad上查看源代码,因此 HTML中可能存在隐藏的内容).

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 ExcelResponse.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可以猜到的原因.现在我将尝试您建议的修复程序.

解决方法 问题是浏览器知道你的数据的编码是UTF-8,但它无法告诉Excel.当Excel打开文件时,它会假定您的系统是默认编码.如果您复制一些非ASCII文本,将其粘贴到记事本中,并使用UTF-8编码保存,但是,您将看到Excel可以正确检测它.它适用于iPad,因为它的默认编码恰好是UTF-8.

原因是记事本在文件的开头放置了正确的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
总结

以上是内存溢出为你收集整理的c# – 如何对Unicode进行编码,以便iPad和Excel都能理解?全部内容,希望文章能够帮你解决c# – 如何对Unicode进行编码,以便iPad和Excel都能理解?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1080974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存