技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

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的不同,当以后再遇到文件编码问题时,又多了一份经验。

相关文章

标签: CSharp  CSV  Excel  乱码  asp.net  UTF8-BOM编码  
x
  • 站长推荐
/* 左侧显示文章内容目录 */