失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 彻底解决.net中编码问题的心得

彻底解决.net中编码问题的心得

时间:2023-03-25 16:34:22

相关推荐

彻底解决.net中编码问题的心得

本文将解决.net(c#)系统中因编码转换而出现的乱码问题。

最近的系统与字符集打交道,字符集的编码是一个非常头疼的事情,不小心就会造成乱码。深入学习编码知识,可以使我们在写程序时少走弯路。

要实现的功能:将一大堆网页文件批量导入数据库,然后再从数据库中批量导出保存为网页文件,导出的文件还需要再导入数据库中,依次循环。

由于最原始的网页文件来源很复杂,所以造成了编码不统一,有utf8、gb2312、gbk等。一般情况下,.net读取文本文件时,自己会识别出来编码,不需要我们操心,但是,经过测试,从数据库中读取的内容保存为文件后(写入时统一设置为utf-8),程序就不能正常识别文件的编码了。

.net中的System.IO.File.ReadAllText(filePath),默认采用utf-8为编码来读取文件,也可以传入编码System.Text.Encoding.Default来解决问题。Default是Encoding类的一个属性,表示操作系统的当前 ANSI 代码页的编码。不同区域的操作系统,该属性值是也是不同的,比如:亚洲地区语言的编码的值为:System.Text.DBCSCodePageEncoding。

.net通过文件的BOM信息,能判断出来文件是什么格式:

Unicode {0xFF, 0xFE};

BE-Unicode {0xFE, 0xFF};

UTF8 = {0xEF, 0xBB, 0xBF};

由上可知,我将数据库里的内容保存为文件时,可能没有将BOM信息写入文件头,因此.net没有正确获取到文件的编码类型。

写入文件时,将BOM信息也添加到文件的代码:

这样保存的文件,.net就可以识别出来它的编码了,而不至于再造成乱码的问题了。

小结:通过将文件转换成byte[],然后分析文件的BOM信息,即可得到文件的编码类型,然后进行相应的操作,避免造成乱码!

当文件有BOM信息时,我们通过File.ReadAllText("c:\cn_web_com.html",System.Text.Encoding.Default)就可以让.net自动去识别文件的编码类型,从而获取正确的文件内容。

当文件没有BOM信息时,我们在写入文件时,最好能添加它的BOM信息。否则,我们只能手动针对不能的编码来解析不同的文件,比如cn_web_com.html为utf8编码,我们读取它时,语句为:File.ReadAllText("c:\cn_web_com.html",System.Text.Encoding.GetEncoding("utf-8"));

如果觉得《彻底解决.net中编码问题的心得》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。