StringBuilder和重音

A.P*_*cat 3 c# stringbuilder encoding

我有一个StringBuilder,我想写一个包含重音到csv文件的文本.

码:

StringBuilder strbr = new StringBuilder();
strbr.AppendLine("ù;é;à");
File.WriteAllText(filePath + ".csv", strbr.ToString());
Run Code Online (Sandbox Code Playgroud)

但是当我打开我的csv文件时,只有: é

文件"test.csv"正确包含ù;é;à,但当我用Excel打开它时,我有:

Excel截图

也许我错过了Excel的标题?

Dmi*_*nko 5

该文件将以UTF-8编码保存,但使用默认值读取,例如Win-1251.您可以显式指定编码(UTF8在本例中):

File.WriteAllText(filePath + ".csv", strbr.ToString(), Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

编辑:对于我最初的误导性解释,我感到非常抱歉(感谢Patrick Hofman指出了这一点).实际问题是缺少BOM(咬订单标记):默认情况下File.WriteAllText,文本以没有 BOM 的UTF8格式写入:

https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,8a8ede9e1ec4fece

public static void WriteAllLines(String path, IEnumerable<String> contents)
{ 
    // ...
    InternalWriteAllLines(new StreamWriter(path, false, StreamWriter.UTF8NoBOM), contents);
}
Run Code Online (Sandbox Code Playgroud)

然后Excel读取文件,没有看到任何BOM,因此尝试使用默认编码读取文件.

  • @Patrick Hofman:谢谢!对于我误导性的解释,我很抱歉; 参考源说清楚 - "InternalWriteAllLines(new StreamWriter(path,false,StreamWriter.UTF8NoBOM),contents);` (2认同)