导出中文,日文字符.csv文件+ mvc3

时间:2012-12-31 12:13:25

标签: asp.net-mvc-3 export-to-csv chinese-locale

我使用以下代码将内容导出到.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却没有。

3 个答案:

答案 0 :(得分:1)

当您在asp.net上提供该文件时,您还必须处理http pipleline的编码。我不早点发现,对不起。

我没有使用普通的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;    
}

答案 1 :(得分:1)

我也有同样的问题,使用UTF-8-BOM解决它。

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

答案 2 :(得分:0)

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

Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
return file;