有StringBuilder, 从中我们可以得到我们想要写的文本。但这就是问题所在,尝试了两种写入文件的方法。
源数据:
sb- 这是相同的- 这是*.csvStringBuilder
fullFileName文件的完整路径
第一种方式:
var file = Encoding.UTF8.GetBytes(sb.ToString());
File.WriteAllBytes(fullFileName, file);
第二种方式:
System.IO.File.WriteAllText(fullFileName, sb.ToString(), Encoding.UTF8);
我查看了Notepad++,第一种方法以 "UTF8 (Without BOM)"编码写入文件,第二种方法以"UTF8 " 编码写入文件。第二个文件没有编码问题,所有内容都是可读的,第一个文件在 Excell 中打开时出现错误。文件格式为*.csv。请说明问题的原因是什么以及第一种方法如何解决?
显然,在没有 BOM 的情况下,Excel 无法自动检测编码,并认为它是 UTF-16 编码。作为用户端的解决方案,这可能是合适的:创建一个空白表格,并通过“数据”→“来自文本”导入它:Excel 将识别 CSV 并提示您选择一种编码。
如果你想把BOM写成文本:
Encoding.GetBytes它不知道你编码的不是一段文本,而是整个文本,并且不添加BOM。您可以使用 自己获取 BOMEncoding.UTF8.GetPreamble(),将这些字节写入文件,然后附加其余部分。不幸的是,我没有找到方法
File.AppendAllBytes,所以你要么必须连接内存中的字节(这可能不是最有效的方法),或者分两步写: