C#创建的CSV文件Excel打开有乱码的原因及解决方法
作者:admin 时间:2021-8-24 13:53:43 浏览:今天用C#创建一个CSV文件,过程很顺利,创建的文件用记事本能正常打开且内容没有问题,可是,用Excel打开时却在开头出现几个字符的乱码,这是怎么回事?
内容出现乱码基本可断定是内容编码问题
经验告诉我,内容出现乱码基本可断定是内容编码有问题,但是如何解决这个编码问题,让它能在各个编辑器或浏览器打开正常呢?
再研究研究。
发现这个CSV文件用记事本打开,再保存后,也能用Excel正常打开没有乱码。这是什么原因呢?
这就要看看记事本保存的utf-8与我程序创建时用的utf-8有什么不同了。
UTF-8编码与UTF-8 BOM编码的不同
经过查阅相关资料,发现,记事本保存的utf-8文件,实际上会在文件开始的地方插入UTF-8 BOM头,是UTF-8 BOM编码的文件,这就涉及到加BOM不加BOM的不同了。
UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。
看下图。
这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM(Excel就是其中之一)。
解决方法
知道了问题所在,解决的方法就自然有了。
下面是C#代码:
UTF-8编码的字符串开头处的三个bytes 0xef,0xbb,0xbf就称为UTF-8 BOM头。
关于C# 在TXT写入数据使用UTF-8 bom编码模式
C#中通过
StreamWriter sw = new StreamWriter(path, true);
sw.WriteLine(Content);
这样的代码写入TXT中的数据默认的编码是GB2312格式,那么如何才能使用utf-8的编码格式写入TXT呢?
代码如下:
UTF8Encoding utf8 = new UTF8Encoding(false);
StreamWriter sw = new StreamWriter(path, true, utf8);
这样确实使用utf-8的编码写入没错,但是却不是BOM的编码模式,那如何才能使用utf-8 BOM编码格式呢?
其实很简单,代码如下:
UTF8Encoding utf8BOM = new UTF8Encoding(true);
StreamWriter sw = new StreamWriter(path, true, utf8BOM);
C#保存文件为无BOM的utf8格式
有些情况,我们要保存无BOM的utf8格式,用C#可以这样来实现。
用C#的 File.WriteAllLines 方法,保存文件为无BOM的utf8格式:
File.WriteAllText(strLuaFilePath, string.Join("\n", fileContentList.ToArray()), new System.Text.UTF8Encoding(false));
总结
本文介绍了C#创建的CSV文件Excel打开有乱码的原因及解决方法,通过本文的介绍,我们可以知道文件保存的编码,UTF-8与UTF-8 BOM的不同,当以后再遇到文件编码问题时,又多了一份经验。
相关文章
- 站长推荐