关于编码:在C#中用csv文件编写法语字符

writing French character in csv files in C#

我有一个dbf文件,其中MONTRéAL是实体之一。我必须把这个dbf文件转换成csv文件。

为此,我使用Microsoft Visual FoxPro驱动程序读取此dbf文件,然后将每行转换为逗号分隔,然后将所有行写入名为"asd.csv"的文件。

但在csv文件中,MONTRéAL显示为MONTR?AL,即代替é,出现?字符。我尝试在将行写入csv文件时使用utf8编码,但即使这样也不行。

请帮忙。


您必须使用特定的编码。法语是"ISO-8859-1"或"Windows-1252"。

1
Encoding.GetEncoding("iso-8859-1")


我建议您使用这样的utf8编码:

1
2
3
4
5
6
    using (StreamWriter writer = new StreamWriter("asd.csv", false, Encoding.UTF8))
    {
        writer.WriteLine("Id;City");
        writer.WriteLine("1;Montréal");
        writer.WriteLine("2;Québec");
    }

这将在csv的开头添加一个bom(字节顺序标记),然后您可以直接使用Excel打开文件,甚至可以成功使用标准的Windows记事本打开文件。


几年前我的实现使用了:

1
2
var writer = new StreamWriter(fileStream, Encoding.Unicode);
writer.Write(csvContent.ToCharArray());

我想应该可以,因为我们的应用程序中支持很多语言,包括日语。

编辑:与记事本、记事本++、Excel、libreoffice一起为Montr_al工作…

并且很好地解释了utf8、unicode和其他编码的区别。