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