У меня есть проект ASP.net и вы хотите вернуть CSV-файл, когда отправляется сообщение AJAX (да, это работает. См. Handle file download from AJAX post). Особо то, что я хочу создать результат в MemoryStream, чтобы вернуть его как FileResult. Но моя проблема в том, что немецкие умляуты (ä, ö, ü) испорчены. Итак, вот мой код:Запись строки в MemoryStream развращает ввод
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, умлауты преобразуются во что-то странное. Например, буква верхнего регистра «Ä» заменяется на « ». Так есть ли возможность решить эту проблему?
С наилучшими пожеланиями
Вы пробовали с различными кодировками? – GeorgeChond
'//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 может отображать umlauts, как и должно быть –
Можете ли вы попробовать с System.Text.Encoding.GetEncoding (850)? – GeorgeChond