C #, Excel + CSV: как получить правильную кодировку?
Я уже давно пытаюсь это сделать, но не могу понять. Я пытаюсь экспортировать данные в Excel через файл * .csv. Пока он отлично работает, но у меня есть некоторые проблемы с кодированием при открытии файлов в Excel.
(исходная строка слева, результат EXCEL справа):
Messwert(µm / m) ==> Messwert(µm / m)
Dümme Mässöng ==> Dümme Mässöng
Notepad ++ говорит мне, что файл закодирован "ANSI как UTF8" (WTF?)
Итак, вот несколько способов, которыми я пытался получить достоверный результат: очевидная реализация:
tWriter.Write(";Messwert(µm /m)");
более сложный (пробовал, наверное, десяток или более комбинаций кодирования :)
tWriter.Write(Encoding.Default.GetString(Encoding.Unicode.GetBytes(";Messwert(µm /m)")));
tWriter.Write(Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(";Messwert(µm /m)")));
и так далее
Весь исходный код для метода, создающего данные:
MemoryStream tStream = new MemoryStream();
StreamWriter tWriter = new StreamWriter(tStream);
tWriter.Write("\uFEFF");
tWriter.WriteLine(string.Format("{0}", aMeasurement.Name));
tWriter.WriteLine(aMeasurement.Comment);
tWriter.WriteLine();
tWriter.WriteLine("Zeit in Minuten;Messwert(µm / m)");
TimeSpan tSpan;
foreach (IMeasuringPoint tPoint in aMeasurement)
{
tSpan = new TimeSpan(tPoint.Time - aMeasurement[0].Time);
tWriter.WriteLine(string.Format("{0};{1};", (int)tSpan.TotalMinutes, getMPString(tPoint)));
}
tWriter.Flush();
return tStream;
Созданный файл CSV:
Dümme Mössäng
Testmessung die erste
Zeit in Minuten;Messwert(µm / m)
0;-703;
0;-381;
1;1039;
1;1045;
2;1457;
2;1045;