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

以下为引用的内容:
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"));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql语句查询结果合并union 和union all用法

--合并重复行select * from Aunionselect * from B --不合并重复行select * from Aunion allselect * from B 按某个字段排序--合并重复行select *from (select * from Aunionselect * from B) AS Torder by 字段名 --不合并重复行select *from (select * from Aunion allselec…

vc 控制台添加托盘显示_开源:ESP8266读DHT11温湿度,小程序实时显示

第一、原理讲解原理简述:利用发布订阅模式。第一步,先读取DHT11温湿度数值,第二步,新建主题,然后esp8266往这个主题发送消息,第三步。小程序通过http API接口获取数据。小程序控制原理:esp8266订…

python if elif else_python:通讯录(字典+while+if/else)

Hello,World.我是很久很久很久都没有更新的土土[看]但是即便如此呢我这个人也不喜欢拖拖拉拉的东扯西扯一上来咱们就来讲讲正题勿怪[笑哭]1.使用字典构建通讯录mydic{}//定义一个字典2.使用whlie循环判断是否继续进行while True://循环开始break//循环结束3.使用if/elif/else语…

有BUG!!!慎用default文本

前言下面这段代码,你能发现什么问题吗?public static int? Test1(string str) {return str switch{"A" > 1,"B" > 2,"C" > 3,_ > default,}; } public static int? Test2(string str) {switch (str){case &…

老师看完都吐血的五道题

全世界只有3.14 % 的人关注了 爆炸吧知识 老师看完都要吐血的五道题哈哈哈哈哈虽然小编觉得最后一答完全没问题哈哈哈图片来源于网络,如有侵权请联系删除。你点的每个在看,我都认真当成了喜欢

JDK5.0新特性--可变参数

2019独角兽企业重金招聘Python工程师标准>>> /*** 可变参数*/ public class VariableParamater {/*** 统计2个或多个数的和*/public static void main(String[] args) {//计算2个数的和sum(10,15);/** 问题:如果要计算3个数、4个数、5个数或n个数的和&am…

中职计算机教师考核工作总结,中职计算机教师工作总结.doc

中职计算机教师工作总结中职计算机教师工作总结一个学期以来,认真真学习贯彻党的教育方针政策策,落实上级领导的工作部署署,以重实际,抓实事,求实实效为教学工作的基本原则,,以培养学生创新精神…

爱情二十九课,驾驭爱情

每个人都期待驾驭爱情,都希望让恋人终生痴情于自己,也希望爱情保持新鲜,但爱情是一种非常飘渺的心理因素,能驾驭爱情的技巧是什么呢……大部分人常用的战术有3种: 第一种 用内疚感来驾驭 在发现爱情温度下降时&#xf…

欧几里得距离网络_使用Tensorflow对象检测模型和OpenCV的社交距离和遮罩检测器...

将深度学习和计算机视觉相结合的隔离项目社会距离化这个术语已席卷全球,正在改变着我们的生活方式。社交距离也称为“物理距离”,是指在您自己与其他并非来自家庭的人之间保持安全的空间。随着该国开始在激增的COVID-19案件中发挥作用,保持社…

python 实现点击右键用某个程序打开功能_工欲善其事,必先利其器(1)——Python开发环境安装与配置...

Life Is Short, You Need Python.近年来随着Python的火爆,很多人想要学习并使用Python,本文将详细介绍一套Python开发环境的安装与配置,相比Python自带的IDEL,在此环境下将极大的提高开发效率。下面就让我们一步步的开始安装&…

开源实体映射框架EmitMapper介绍

概述对象—对象映射的一种传统做法就是创建许多数据转换对象。这些对象负责在众多数据对象之间复制数据。对于拥有大量数据对象的程序而言,开发人员需要花费大量的时间精力编写大量的数据转换对象来支持数据对象映射。这一过程非常无聊沉闷,而且容易出现…

5分钟盗走你的隐私照片,这个全球性漏洞到底有多可怕

全世界只有3.14 % 的人关注了爆炸吧知识转自:好机友ID:goodjiyou这个时代,大家对电脑出现漏洞,可能已经习以为常。但如果机哥告诉大家,这个漏洞能够在 5 分钟内,破解并盗取你所有加密文件,而且还…

抄写经书的十大益处

抄写经书的十大益处一、从前所作种种罪过,轻者立即消灭,重者也得转经。二、常得吉神拥护,一切瘟疫、水火、盗贼、刀兵、牢狱之灾,悉皆不受。三、夙世怨对,咸蒙法益,而得解脱,永免寻仇报复之苦。…

我的世界命令计算机,我的世界有哪些指令?电脑版指令大全

在我的世界游戏中玩家可以依靠指令做很多现实生活中都可以做的事情,甚至有些现实中做不到的事情,比如上天堂,所以指令对于每个我的世界的玩家来说都非常重要,今天小编给大家介绍我的世界指令大全:我的世界指令大全&…

什么是 CAT?

“CAT” 是“Computer Aided Translation”的缩写,因为这三个单词长度较长,所以为了书写简便,业界人士通常缩写为“CAT”。单词“CAT”翻译成中文是“计算机辅助翻译”,是为了提高翻译的效率和质量开发的辅助翻译软件。主要运用翻…

存储过程学习笔记(一)

存储过程学习笔记(一) 存储过程是将具有规律并且经常使用的sql语句,写成可以接受参数的sql语句进行保存起来,给以后进行调用 一、存储过程的格式 ■■■■■■代码开始■■■■■■CREATE PROCEDURE [存储过程的名称][参数1],[参数…

道德经和译文_老子《道德经》第九章原文、注释、译文、导读及解析(收藏版)...

《道德经》被誉为“万经之王”,内容涵盖哲学、伦理学、政治学、军事学等诸多学科,曾被后人尊奉为治国、齐家、修身、为学的宝典。它对我国的哲学、科学、政治、宗教等都产生了深远的影响,体现了古人的一种世界观和人生观。《道德经》作为道教…

StackOverflow程序员推荐:每个程序员都应读的30本书

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。” 很多程序员响应,他们在推荐时也写下…

超震撼!你没见过的24张震撼照片

全世界只有3.14 % 的人关注了爆炸吧知识话不多说,这些照片,每张都很有价值:艾菲尔铁塔,从底部往上看360度的彩虹高科技停车(大众沃尔夫斯堡汽车厂)被整理过的蜂窝沙特阿拉伯的农田两棵树共享一个枝干两位接…

使用 baget 搭建 nuget 私有服务

现在几乎所有语言都提供包管理工具,比如 JavaScript 的 npm ,Java 的 Maven ,Dart 的 pub 。.Net 程序当然是 NuGet 。NuGet 也出现很多年了,奇怪的是居然还有很多人不知道。现在软件结构越来越复杂,在多个项目中往往需…