yas*_*891 13 c# csv excel encoding export
我现在已经尝试了很长一段时间,但无法弄明白.我正在尝试通过*.csv文件将数据导出到Excel.它到目前为止工作得很好,但在Excel中打开文件时遇到了一些编码问题.
(左边的原始字符串,右边的EXCEL结果):
Messwert(µm / m) ==> Messwert(µm / m)
Dümme Mässöng ==> Dümme Mässöng
Run Code Online (Sandbox Code Playgroud)
Notepad ++告诉我该文件被编码为"ANSI as UTF8"(WTF?)
所以这里有不同的方法我试图得到一个有效的结果:明显的实现:
tWriter.Write(";Messwert(µm /m)");
Run Code Online (Sandbox Code Playgroud)
更复杂的一个(试过可能十几个或更多的编码组合:)
tWriter.Write(Encoding.Default.GetString(Encoding.Unicode.GetBytes(";Messwert(µm /m)")));
tWriter.Write(Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(";Messwert(µm /m)")));
Run Code Online (Sandbox Code Playgroud)
等等
创建数据的方法的完整源代码:
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;
Run Code Online (Sandbox Code Playgroud)
生成的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;
Run Code Online (Sandbox Code Playgroud)
这对我来说很完美:
private const int WIN_1252_CP = 1252; // Windows ANSI codepage 1252
this._writer = new StreamWriter(fileName, false, Encoding.GetEncoding(WIN_1252_CP));
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试以下方法:
using (var sw = File.Create(Path.Combine(txtPath.Text, "UTF8.csv")))
{
var preamble = Encoding.UTF8.GetPreamble();
sw.Write(preamble, 0, preamble.Length);
var data = Encoding.UTF8.GetBytes("??,\"Hello\",text");
sw.Write(data, 0, data.Length);
}
Run Code Online (Sandbox Code Playgroud)
在写入UTF8编码的CSV之前,它会将正确的UTF8前导码写入文件.
| 归档时间: |
|
| 查看次数: |
28457 次 |
| 最近记录: |