【发布时间】:2015-06-03 21:01:14
【问题描述】:
我有一个 ASP.net 项目,并且希望在发送 AJAX 帖子时返回一个 CSV 文件(是的,它有效。请参阅 Handle file download from AJAX post)。 特殊的是,我想在 MemoryStream 中创建结果以将其作为 FileResult 返回。 但我现在的问题是,德语变音符号(ä、ö、ü)被破坏了。所以这是我的代码:
public ActionResult Download(FormCollection form) {
string[] v = new string[16];
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream,
System.Text.Encoding.GetEncoding("Windows-1252"));
SqlCommand cmd = dbconn.CreateCommand();
//create SQL command
while (rs.Read()) {
v = new string[16];
v[0] = rs.GetString("IstAktiv");
v[1] = rs.GetString("Haus");
//cache all the values
...
//write cached values
for (int i = 0; i < v.Length; i++) {
if (i > 0) writer.Write(";");
writer.Write(v[i]);
writer.Flush();
}
writer.Write("\r\n");
writer.Flush();
} //end while rs.Read()
FileContentResult ret = new FileContentResult(stream.ToArray(), "text/csv");
ret.FileDownloadName = "Kontakte.csv";
writer.Close();
return ret;
} //end method
所以当我在 Excel 中打开生成的文件时,变音符号会被转换成奇怪的东西。例如,大写字母“Ä”更改为“�”。 那么有没有办法解决这个问题呢?
最好的问候
【问题讨论】:
-
你试过不同的编码吗?
-
//System.Text.Encoding.GetEncoding("UTF-8") //*/ //System.Text.Encoding.GetEncoding(1141) //*/ //System.Text.Encoding.Unicode //System.Text.Encoding.GetEncoding("Windows-1250")是的,这些是其他编码,我试过了。我用 UTF-8 得到了最好的结果。在普通记事本中打开文件时一切都很好,但是当我在 Excel 中打开同一个文件时,变音符号无论如何都已损坏。所以我将文件保存在记事本中作为 ANSI 编码的文件,甚至 Excel 也可以显示它们应该显示的变音符号 -
你可以试试 System.Text.Encoding.GetEncoding(850) 吗?
-
这不是损坏,而是编码错误。您不是使用 Unicode,而是强制转换为 Windows 1252。改用 Unicode
-
@GeorgeChond 问题是 OP 正在 尝试更改编码,导致转换错误。 .NET 用户 Unicode,没有理由尝试不同的编码
标签: c# asp.net-mvc