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的标题?
该文件将以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,因此尝试使用默认编码读取文件.