表现为⽤ie或者infopath之类的xml软件打不开这个xml,txt打开有时正常有时乱码。
当然C#也是⽆法解析的。
但是⽤ultraedit打开正常显⽰,⽤ultraedit保存为utf8后xml就⼀切正常了。
查询发现是bom的原因。
什么是BOM呢?
BOM:Byte Order Mark,中⽂名字节顺序标记。UCS规范建议在传输字节流前,先传输BOM来判断字节顺序。其实UTF-8是不需要⽤BOM来表明字节顺序的,但是可以⽤BOM来表明编码⽅式。BOM的UTF-8编码是EF BB BF,所以呢,如果接受者收到EF BB BF开头的字节流,就说明它是UTF-8编码了。
由此可见,对于UTF-8来说,BOM是可有可⽆的,可是,有的XML解析⽅式不认这个BOM,所以就报错了。
解决办法如下,强制把xml⽂本保存为utf8格式就好了
XmlDocument doc = new XmlDocument();
string xmlString = ReadContext(tmpDir + "\\" + xml);
try
{
doc.LoadXml(xmlString);
}
catch (Exception e)
{
log.ErrorFormat(string.Format("Xml⽆法解析,名称:{1}, 格式错误,错误原因:{0}", e.Message, xml));
continue;
}
ReadContext函数是把xml⾥的内容作为⽂本读出来,注意编码很重要,不能⽤default
System.Text.Encoding.UTF8
private static string ReadContext(string path)
{
FileStream fs = new FileStream(path, FileMode.Open);xml文件怎么打开
StreamReader sr = new StreamReader(fs,System.Text.Encoding.UTF8);
string context = sr.ReadToEnd();
fs.Close();
sr.Close();
sr.Dispose();
fs.Dispose();
return context;
}
29. 在Linux上使⽤unzip解压以默认编码解压,中⽂⽂件名会出现乱码
解决办法: 下载p7zip-9.13-1.el5.rf.x86_64.rpm和p7zip-plugins-9.13-1.el5.rf.x86_64.rpm包 ⽤以下⽅法安装后,使⽤7z x filen ...
boost.property_tree解析xml的帮助类以及中⽂解析问题的解决(转)
boost.property_tree可以⽤来解析xml和json⽂件,我主要⽤它来解析xml⽂件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使⽤过程中却发现各 ...
(原创)boost.property_tree解析xml的帮助类以及中⽂解析问题的解决
boost.property_tree可以⽤来解析xml和json⽂件,我主要⽤它来解析xml⽂件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使⽤过程中却发现各 ...
关于l中配置Spring字符编码过滤器以解决中⽂乱码的问题
当出现中⽂乱码问题,Spring中可以利⽤CharacterEncodingFilter过滤器解决,如下代码所⽰: < ...
Spring编码过滤器:解决中⽂乱码
Spring编码过滤器:解决中⽂乱码 针对问题: 前台JSP页⾯和JAVA代码中使⽤了不同的字符集进⾏编码的时候就会出现表单提交的数据或者上传/下载中⽂名称⽂件出现乱码的问题: 解决⽅案: web.x ...
Android -- 创建XML⽂件对象及其序列化, pull解析XML⽂件
1. 创建XML⽂件对象及其序列化 ⽰例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
⾃⼰动⼿写中⽂分词解析器完整教程,并对出现的问题进⾏探讨和解决(附完整c&num;代码和相关dll⽂件、txt⽂件下载)
[CareerCup] 17.10 Encode XML 编码XML
17.10 Since XML is very verbose, you are given a way of encoding it where each tag gets mapped to a ...
php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL
今天遇到⼀个问题,json_decode解析json数据返回null,试了各种⽅法都不⾏,最后发现,原来是json⽂件编码的问题. 当json_decode解析utf-8带BOM格式的json数据时, ...
随机推荐
python 装饰器
#!/usr/bin/env python3 #-*-encoding:utf-8-*- def w3(*args, **kwargs): ') def w1(): def ww1(func): de ...
oracle⾏转列与列转⾏
⼀.⾏转列 在有些应⽤场景中,如学⽣成绩.学⽣所有科⽬的成绩都保存到⼀张表⾥⾯,当我们需要以列表的形式显⽰出学⽣所对应的每⼀科⽬的成绩的时候,需要使⽤到⾏转列. ⽰例 -- 学⽣成绩表 create ...
Activemq Jolokia
打开JMX …
Winform混合式开发框架的特点总结
Winform混合式开发框架,是⼀种⽀持分布式部署的应⽤模式,⽀持直接连接数据库,访问远程WCF服务,访问远程Web API服务等服务的综合性框架,根据不同的需求采⽤不同的数据接⼝,是⼀个适应性很⼴的 ...
断⾔(ASSERT)的⽤法
我⼀直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作⽤并⾮“报错”. 在经过对其进⾏⼀定了解之后,对其作⽤及⽤法有了⼀定的了解,assert()的⽤法像是⼀种“契约式编程”,在我的理解 ...
com.alibaba.fastjson.JSONObject学习
JSONObject json = new JSONObject(); //设置json属性,可以是对象,数值 json.put("key",value); //获取json的普通 ...
开源DBCP、C3P0、Proxool 、 BoneCP连接池的⽐较
goodsSearch初始化选中代码
watch: { selectGoodsList (val) { let list = [] val.forEach(item => { dsList.forEach((tag, ...
MAC安装JDK及环境变量配置
for循环介绍
流程控制之for循环names=['yb','zs','yxd','lb'] i=0 while i < len(names): #4 < 4 print(names[i]) i+=1 # ...
发布评论