C#XmlDocument无法读取utf-16文件
使用 XmlDocument.Load(path); 方法来读取一个encoding为utf-16的xml时,就报了以上异常。
Xml文件:
- <?xml version="1.0" encoding="utf-16"?>
- <DataProviders>
- <Provider
- Name="A"
- Type="OleDataProvider"
- ConnectionString="Provider=SQLOLEDB.1;Password=xx;User ID=sa;Data Source=192.168.1.x\SQL2008;Initial Catalog=xxx" />
- <Provider
- Name="B"
- Type="SubSonic.SqlDataProvider, SubSonic"
- ConnectionString="Password=xx;Persist Security Info=True;User ID=sa;Database=xx;Data Source=192.168.1.x\SQL2008" />
- </DataProviders>
<?xml version="1.0" encoding="utf-16"?>
<DataProviders><ProviderName="A"Type="OleDataProvider"ConnectionString="Provider=SQLOLEDB.1;Password=xx;User ID=sa;Data Source=192.168.1.x\SQL2008;Initial Catalog=xxx" /><ProviderName="B"Type="SubSonic.SqlDataProvider, SubSonic"ConnectionString="Password=xx;Persist Security Info=True;User ID=sa;Database=xx;Data Source=192.168.1.x\SQL2008" />
</DataProviders>
在网上找了一下都不知道怎么解决。经过摸索以及Msdn上的启发,得出以下解决方案:
1. 将 uft-16 修改成 utf-8。
这是最简单的方式,但是由于我们项目中该xml文件已经在客户进行了部署,并且系统其他地方也都有对该文件进行操作,为了保证系统稳定性,这种方式只能被抛弃。
2. 将 xml 文件编码修改成 Unicode。
既然是字符编码导致,修改文件编码也可以解决问题,但是仍然会影响稳定性。
3. 将 xml 文件以文本的方式读取进字符串,再通过 LoadXml 方式加载到 XmlDocument 中。
- string xmlContent = File.ReadAllText(path);
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.LoadXml(xmlContent);
string xmlContent = File.ReadAllText(path);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlContent);
参考:
http://stackoverflow.com/questions/310669/why-does-c-sharp-xmldocument-loadxmlstring-fail-when-an-xml-header-is-included
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data;
{
public class XmlOperateFuntion
{
public static void singleCommandXmlDocumentCreateFunction(string path)//新加创建单条指令xml方法
{
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();
xtw.WriteStartElement("SingleCommandList");
xtw.WriteAttributeString("xmlns:xsi", "http:www.w3.org/2001/XMLSchema-instance");
xtw.WriteStartElement("Commands");
xtw.WriteEndElement();
xtw.WriteEndElement();
xtw.WriteEndDocument();
xtw.Close();
public static void commandChainXmlDocumentCreateFunction(string path)//新加创建指令链列表xml方法
{
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();
xtw.WriteStartElement("CommandChainDocument");
xtw.WriteAttributeString("xmlns:xsi", "http:www.w3.org/2001/XMLSchema-instance");
xtw.WriteStartElement("CommandChainGroups");
xtw.WriteEndElement();
xtw.WriteEndElement();
xtw.WriteEndDocument();
xtw.Close();
public static DataTable SearchFromXml(string filePath,string targetPath, string projectID)//单个卫星单条指令xml文件返回数据表
{
string convertPath=changeEncodingMode(filePath, ref targetPath);
DataTable dt = new DataTable();
XmlTextReader reader = new XmlTextReader(convertPath);
List<singleCommandModelType> singleCommandList = new List<singleCommandModelType>();
singleCommandModelType scm = new singleCommandModelType();
while (reader.Read() != null)
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "CommandText")
{ scm.commandType = reader.ReadElementString().Trim(); }
if (reader.Name == "Description")
{ scm.commandDescription = reader.ReadElementString().Trim(); }
{
scm.commandValue = reader.ReadElementString().Trim();
}
if (reader.Name == "SendTime")
{
scm.sendDatetime = DateTime.Parse(reader.ReadElementString().Trim());
}
if (reader.NodeType == XmlNodeType.EndElement)
{
singleCommandList.Add(scm);
scm = new singleCommandModelType();
}
dt.Columns.Add("ID");
dt.Columns.Add("CommandType");
dt.Columns.Add("CommandValue");
dt.Columns.Add("CommandSendTime");
dt.Columns.Add("CommandBytes");
dt.Columns.Add("CommandProjectCode");
dt.Columns.Add("CommandTypeAndValue");
foreach (singleCommandModelType item in singleCommandList)
{
dt.Rows.Add("", item.commandType, item.commandValue, item.sendDatetime, "", "", "");
reader.Close();
return dt;
}
public static DataTable SearchCommandResult(string commandSource, DataTable dt)//查询指令返回表结果
{
DataTable rsultDT = new DataTable();
rsultDT.Columns.Add("ID");
rsultDT.Columns.Add("CommandType");
rsultDT.Columns.Add("CommandValue");
rsultDT.Columns.Add("CommandSendTime");
rsultDT.Columns.Add("CommandBytes");
rsultDT.Columns.Add("CommandProjectCode");
rsultDT.Columns.Add("CommandTypeAndValue");
foreach (DataRow dr in dt.Rows)
{
if (dr["CommandType"] == commandSource)
{
rsultDT.Rows.Add(dr);
return rsultDT;
public static string changeEncodingMode(string sourcePath,ref string tempPath)//将UNICODE格式编码转换成UTF8格式
{
XmlDocument document = new XmlDocument();
string content = System.IO.File.ReadAllText(sourcePath);
content.Replace("utf-16", "Unicode");
document.LoadXml(content);
document.Save(tempPath);
return tempPath;
}
}
{
public string commandType { get; set; }
public string commandValue { get; set; }
public string commandDescription { get; set; }
public DateTime sendDatetime { get; set; }
}
C#XmlDocument无法读取utf-16文件相关推荐
- XML(3)XDocument与XmlDocument递归读取xml文件
通过XDocument与XmlDocument将xml文件读取到TreeView上,其中主要是用递归方式将xml下的元素都加载到TreeView控件上面. XDocument 步骤: (1)加载xml ...
- b是python文件二进制打开,Python核心编程16 ----- 文件的打开(读取),修改,关闭,二进制...
ctrl + 左键点击 进入模块 1.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作 --- I/O(Input/Output) 操作文件 1.打开文件 2. ...
- Python核心编程16 ----- 文件的打开(读取),修改,关闭,二进制
ctrl + 左键点击 进入模块 1.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作 --- I/O(Input/Output) 操作文件 1.打开文件 2. ...
- 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...
从项目目录中读取SQL查询文件(Read SQL query file from project directory) 我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中 ...
- TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制
TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和tf.data.Dataset机制 之前写了一篇博客,关于<Tensorflow生成自己的 ...
- 不经保存,直接读取上传文件
不经保存,直接读取上传文件的内容 <%@ Page Language="C#" AutoEventWireup="true" %> <!D ...
- python dicom图像分割_python读取DICOM头文件的实例
这篇文章主要介绍了关于python 读取DICOM头文件的实例,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 用dicompyler软件打开dicom图像,头文件如图所示: 当然也可以 ...
- 利用Python读取外部数据文件
不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素.利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析.数据可 ...
- java使用poi(XSSFWorkbook)读取excel(.xlsx)文件
其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类 ...
- 读取云服务器文件列表,读取云服务器文件列表
读取云服务器文件列表 内容精选 换一换 登录Windows操作系统的弹性云服务器时,需使用密码方式登录.因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员 ...
最新文章
- [转]详解编译预处理
- Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)
- klearn 文本分类_使用gensim和sklearn搭建一个文本分类器
- KOL:Key Opinion Leader
- 修改ant design vue中的Icon图标颜色
- form表单、控制器中接收表单提交数据的4种方式
- 【积少成多】vi的进阶使用
- [转帖]成为合格系统管理员的标准
- c语言for嵌套循环语句,关于for嵌套循环语句的疑问
- ChainerCV︱堪比Opencv--深度学习工具库(Faster R-CNN、SSD 和 SegNet)
- 2048游戏回顾三:自定义Dialog和ProgressBar
- C4D R26 安装教程
- ASP.NET MVC+Vue.js实现联系人管理
- LeetCode.1046-最后的石头重量(Last Stone Weight)
- 同样取整,TRUNC函数与INT函数的有什么区别?
- 被哈佛录取后,他骑行4300公里旅行回家
- 华为手机比较好用的三款推荐
- Android N分屏(多窗口)适配
- Vue,js前端实现语音实时转换文字,前端实现浏览器语音实时转换为文字,vue阿里云语音转文字
- 数字图像处理——图像质量评价(Python)
热门文章
- 886 微型计算机原理,886微型计算机原理及应用.pdf
- 工业机器人工具中心点标定的意义_新品发布 | 倍加福新推VOS智能视觉传感器,为机器人添一双“慧眼”...
- html body 边框,html – 如何在表的tbody / thead部分创建边框?
- 新电脑怎么分盘_电脑新系统装了杀毒软件之后,原本非常流畅,怎么突然变卡了?...
- 说实话,这个发布会绝了!
- 同步逻辑电路和异步逻辑电路
- Linux命令中的参数,linux中一些命令以及一些参数的用法
- 安卓 sqlite数据存入mysql_在Android上简单导出和导入SQLite数据库
- java实现jsonscheme_java – jsonschema和日期类型
- 利用python 对比相似度_头条、油条商标有多像?Python检测发现相似度高达98.4%