本文将解决.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信息也添加到文件的代码:

以下为引用的内容:
StreamWriter myText;
myText = new StreamWriter("文件路径", false, new UTF8Encoding(true));

这样保存的文件,.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中编码问题的心得相关推荐

  1. 如何解决python中编码错误的问题_【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 对于Python解析器 而Python解析器所干的事情,就是: Python解析器,根据当前的所用的字符串编码类型 此字符串编码类型,是你自己所设置的 不 ...

  2. java 对象逃逸 解决_Java中的逃逸问题心得

    大家一般认为new出来的对象都是被分配在堆上,但这并不是完全正确,通过对Java对象分配过程分析,我们发现对象除了可以被分配在堆上,还可以在栈或TLAB中分配空间.而栈上分配对象的技术基础是逃逸分析和 ...

  3. 解决java中对URL编码的问题

    解决java中对URL编码的问题 参考文章: (1)解决java中对URL编码的问题 (2)https://www.cnblogs.com/a198720/p/4210763.html 备忘一下.

  4. Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 ‘\u559c\u6b22\u4e00\u4e2a\u4eba ’ 转为utf-8的解决办法...

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 '\u559c\u6b22\u4e00\u4e2a\u4eba ' 转为utf-8的解决办法 相信小伙伴们遇到过 ...

  5. Python中编码问题:u‘\xe6\x97\xa0\xe5\x90\x8d‘ 类型和 ‘\u559c\u6b22\u4e00\u4e2a\u4eba ’ 转为utf-8的解决办法

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 '\u559c\u6b22\u4e00\u4e2a\u4eba ' 转为utf-8的解决办法 参考文章: (1) ...

  6. 解决Python3中的中文字符编码的问题-亲测有效

    解决Python3中的中文字符编码的问题 一.原理篇: Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等.这篇文章主要介绍了Python3中的解决中文字符编 ...

  7. java中html中文乱码怎么解决_Java读取网页HTML 汉字乱码 (已解决,bufferedReader中编码改成...

    Java读取网页HTML 汉字乱码 (已解决,bufferedReader中编码改成 Java读取网页HTML 汉字乱码 (已解决,bufferedReader中编码改成跟网页的一致即可) #网页HT ...

  8. base64编码 springboot_解决idea中Springboot找不到BASE64Encoder或Decoder的jar包

    解决idea中Springboot找不到BASE64Encoder或Decoder的jar包 问题描述: Springboot项目.明明都把包下载放进去了,就是报错找不到.JDK11 解决方法之一: ...

  9. 根本解决Python2中unicode编码问题

    Python2中编码问题 因为计算机只识别01这要的二进制,所以在计算机存储我们的文件时,要使用二进制数来表示.所以编码就是哪个二进制数表示哪个字符: 编码原由 系统编码.文件编码与python系统编 ...

最新文章

  1. STE:华南农大曾振灵/熊文广-猪粪介导抗生素耐药基因向农场工人和周边环境传播...
  2. java tcp fin_TCP报文中的SYN,FIN,ACK,PSH,RST,URG
  3. 在进入新版本 的时候,进行推送引导
  4. 用html可以写游戏,javascript可以写游戏吗?
  5. SSL与WildFly 8和Undertow
  6. Python笔记-使用uiautomator2编写某APP注册机
  7. 201771010101白玛次仁《面向对象程序设计(java)》第十二周实验总结
  8. Eclipse运行tomcat失败
  9. 常去的国外网站一览表
  10. apache如何加载系统环境变量_游学电子:windows10系统如何用cmd指令设置环境变量...
  11. 二次元《尤里国简介》
  12. 微信公众号开发(一)配置服务器
  13. Ubuntu 16.04 Kalibr安装使用
  14. 教程 - 【超详细】从零开始部署网站——阿里云主机CentOS系统
  15. 电子科技大学计算机导师李珂,导师个人信息 - 电子科大研招网
  16. Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾
  17. Windows NDK安装及开发
  18. Day01.二分查找、移除元素
  19. github以网页的方式查看.html
  20. Vue.js 3.0 学习笔记(十一)Vue Router路由

热门文章

  1. 速读训练软件_记忆宫殿记忆力训练教程-第八天
  2. mvc4 html.pager,MVC分页之MvcPager使用详解
  3. linux运维和3dmax哪个简单,牛逼运维常用的工具系列-2
  4. 查询时拼接两列数据_如何用VBA代码查询两列数据差异?
  5. bootstraptable获得所有行_郎酒领衔,2020“川酒全国行”首站香满花城
  6. 仓库无证如何处罚_“非现场执法”查处无证网约车,罚款15万!滴哥:怎们罚的都不知道!...
  7. 类变量和实例变量的区别是什么?
  8. oracle 时间小于,jquery easyui 对于开始时间小于结束时间的判断示例
  9. maven添加子工程_重量级!Maven史上最全教程,看了必懂
  10. 原来Github上也有这么多的JavaScript学习资源!