使用XDocument加载编码为UTF 16的xml

San*_*ile 40 c# xml unicode visual-studio-2008 winforms

我试图使用XDocument方法读取xml文档.但我在xml有错误时收到错误

<?xml version="1.0" encoding="utf-16"?>
Run Code Online (Sandbox Code Playgroud)

当我手动删除编码.它完美的工作.

我收到错误" 没有Unicode字节顺序标记.无法切换到Unicode. "

我试着搜索,然后我降落在这里 - >

为什么包含XML头时C#XmlDocument.LoadXml(字符串)会失败?

但无法解决我的问题.

我的代码:

XDocument xdoc = XDocument.Load(path);
Run Code Online (Sandbox Code Playgroud)

有什么建议 ??

谢谢.

Ran*_*ica 62

看起来您尝试读取的文件未编码为Unicode.您可以通过尝试使用指定为的XML文件中的编码打开编码为ANSI的文件来复制行为utf-16.

如果您无法确保文件编码正确,那么您可以将文件读入流(让StreamReader检测编码),然后创建XDocument:

using (StreamReader sr = new StreamReader(path, true))
{
    XDocument xdoc = XDocument.Load(sr);
}
Run Code Online (Sandbox Code Playgroud)


San*_*ile 9

我试过了,发现了另一种方法!

XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path));
Run Code Online (Sandbox Code Playgroud)

  • 这不能为我编译,因为Parse方法接受一个字符串,而ReadAllLines方法返回一个字符串数组!不应该是ReadAllText吗? (4认同)
  • XDocument.Parse需要一个字符串,因此File.ReadAllLines不会编译.您必须使用File.ReadAllText.至少,这就是VS2017中我的工作方式. (2认同)

小智 6

这段代码:

System.IO.File.ReadAllLines(path)
Run Code Online (Sandbox Code Playgroud)

返回一个字符串数组.正确的代码是:

System.IO.File.ReadAllText(path)
Run Code Online (Sandbox Code Playgroud)