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

我有一个用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 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上查看源代码?

更新
我刚刚做了一个有趣的发现。如果我的编码为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上不起作用。我输不了输了。

UPDATE3根据您的建议,我查看了十六进制代码。没有BOM,但是文件布局之间存在差异。

UTF84D 61 74 65(与第一个单词MATERIAL匹配)
UTF324D 00 00 00(第一个单词MATERIAL中的M)

因此,看起来UTF32以32位进行布局,而UTF8则以8位进行布局。我认为这就是Excel可以猜测的原因。现在,我将尝试您建议的修复程序。

参考方案

问题在于浏览器知道您数据的编码为UTF-8,但无法告诉Excel。 Excel打开文件时,将采用系统的默认编码。但是,如果您复制一些非ASCII文本,则将其粘贴到记事本中,并以UTF-8编码保存,您将看到Excel可以正确检测到它。它可以在iPad上运行,因为其默认编码恰好是UTF-8。

原因是记事本在文件的开头放置了正确的byte order mark(对于UTF-8是EF BB BF)。您可以使用十六进制编辑器或其他方法创建包含以下内容的文件,自己尝试

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

这个json格式正确吗? - c#

我尝试解析时有json数据,返回错误的语法错误,请帮助我发现语法错误。[{"isData":"Yes","Details":"[{"Id":"70","Name":"Test","FileName&#…

.NET C#Webbrowser填充输入,不带ID或类名 - javascript

我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……

asp.net mvc中的对象数组数据始终为null - javascript

我需要通过json将对象数组发送到asp.net mvc 2,但是我在mvc控制器中没有得到null对象是这样的entries[1].date = "12/22/2014" entries[1].Ref = "0002" entries[1].Credit = "100" entries[2].da…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…