1

我正在使用以下代码将内容导出到也支持中文和日文字符的 .cvs 文件。

public ActionResult Download(strng accnumber)
{
     string csvContent = "东西,东西,东西, hi";
     var data = Encoding.UTF32.GetBytes(csvContent );
     string filename = "CSV_" + accnumber + ".csv";
     return File(data, "text/csv", filename);
}

当我导出我的文件时,我没有得到正确的中文或日文字符。缺什么?

我已经使用 UTF32 编码来支持它。

编辑

我注意到在记事本中打开我的 .csv 文件会显示完美的字符,但 ms-excel 不会。

4

3 回答 3

2

我也遇到了同样的问题,用 UTF-8-BOM 解决。

Encoding.UTF8.GetPreamble().Concat(Encoding.UTF8.GetBytes(stringData)).ToArray()

于 2017-07-28T13:03:22.363 回答
1

当您在 asp.net 上提供该文件时,您还必须处理 http 管道的编码。之前没发现,抱歉。

你应该使用派生的 ActionResult 之一,而不是使用普通的 ActionResult,而是使用FileContentResult。请注意我正在构建的特殊 ContentType 以告诉浏览器一个 UTF-32 文件即将到来......

public ActionResult Download(string accnumber)
{
        string csvContent = "东西,东西,东西, hi";
        var data = Encoding.UTF8.GetBytes(csvContent);
        // add byte order mark
        var bom = new byte[] { 0xEF, 0xBB, 0xBF };
        // hold it all
        var all = new byte[bom.Length + data.Length];
        // copy over BOM
        Array.Copy(bom, all, bom.Length);
        // copy over data
        Array.Copy(data, 0, all, bom.Length, data.Length);

        string filename = "CSV_" + accnumber + ".csv";
        var file = new FileContentResult( all, "text/csv" )
        {
            FileDownloadName = filename
        };

        return file;    
}
于 2013-01-01T10:35:11.553 回答
0

我也遇到了这个问题。我通过在“返回文件;”之前添加以下行来修复它 它对我有用。

Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
return file;
于 2014-02-21T13:03:04.557 回答