通过C#和德语Umlaute导入DOS-CSV(Ä,Ü,Ö,ä,ü,ö)

时间:2012-06-27 14:00:23

标签: c# excel csv utf-8

我遇到以下问题:我有一些 Excel表,必须将它们导出为 DOS-CSV 格式(出于某些原因)。结果是,德语变音符号(Ä,Ü,Ö,ä,ü,ö)未正确导出。在下一步中,必须将这些CSV文件导入 Winform应用程序。现在是否可以在导入过程中取回相关字符Ä,Ü,Ö,ä,ü,ö?

1 个答案:

答案 0 :(得分:4)

如果选择DOS-CSV格式,Excel将使用437代码页(found that here)对文档进行编码。您可以使用一些代码将其转换回UTF-8:

Encoding dosEncoding = Encoding.GetEncoding(437);
string original = String.Empty;

using (StreamReader sr = new StreamReader(@"D:\Path\To\output.csv", dosEncoding))
{
    original = sr.ReadToEnd();
    sr.Close();
}

byte[] encBytes = dosEncoding.GetBytes(original);
byte[] utf8Bytes = Encoding.Convert(dosEncoding, Encoding.UTF8, encBytes);

string converted = Encoding.UTF8.GetString(utf8Bytes);

我通过将Ä,Ü,Ö,ä,ü,ö放入一个单元格然后将其保存为Excel中的DOS格式的CSV文件来测试它。查看该文档,Excel将其转换为Ž,š,™,„,,”

通过上面的代码运行它会将其转回Ä,Ü,Ö,ä,ü,ö