【问题标题】:Loading xml with encoding UTF 16 using XDocument使用 XDocument 加载编码为 UTF 16 的 xml
【发布时间】:2011-06-01 21:55:44
【问题描述】:

我正在尝试使用 XDocument 方法读取 xml 文档。 但是当 xml 有时我得到一个错误

<?xml version="1.0" encoding="utf-16"?>

当我手动删除编码时。它工作得很好。

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

我尝试过搜索,然后我来到了这里-->

Why does C# XmlDocument.LoadXml(string) fail when an XML header is included?

但无法解决我的问题。

我的代码:

XDocument xdoc = XDocument.Load(path);

有什么建议吗??

谢谢。

【问题讨论】:

    标签: c# xml winforms visual-studio-2008 unicode


    【解决方案1】:

    您尝试读取的文件似乎未编码为 Unicode。您可以通过尝试打开一个编码为 ANSI 的文件来复制该行为,该文件在 XML 文件中的编码指定为 utf-16

    如果不能确保文件正确编码,则可以将文件读入流(让StreamReader检测编码)然后创建XDocument

    using (StreamReader sr = new StreamReader(path, true))
    {
        XDocument xdoc = XDocument.Load(sr);
    }
    

    【讨论】:

    • 我的 XML 输出被吐到 html 中。上述解决方案对我不起作用。我的 xml 文档文本中有一个版权符号 (c),当 HTML 进入浏览器时,它总是会出现乱码。所以我尝试编码(XML 编码 HTML 编码的字符串),但它实际上是在 HTML 中出现的。即 & 复制;在 xml 中,字面意思是 &copy;而不是预期的 ©以便浏览器可以显示 (c)。
    【解决方案2】:

    我试过了,找到了另一种方法!!

    XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path));
    

    【讨论】:

    • 哇!这是新的,4.5刚刚发布! (2012-08-15 - 5 天前) :) 保持你的框架 Sangram 的方式!
    • 据我所知,XDocument.Parse() 方法是新的,刚刚引入 .Net 4.5 框架。那是在 2012-08-15 发布的,当时是 5 天前......它只是一个补充,通常人们只是说谢谢你的补充。 :P
    • 好的。谢谢你:)但我认为从 3.5 开始就存在,因为我仍在使用 3.5:P 检查msdn.microsoft.com/en-us/library/…
    • 这不会为我编译,因为 Parse 方法接受一个字符串,而 ReadAllLines 方法返回一个字符串数组!不应该是ReadAllText吗?
    • XDocument.Parse 需要一个字符串,因此 File.ReadAllLines 无法编译。您必须使用 File.ReadAllText。至少,这就是它在 VS2017 中为我工作的方式。
    【解决方案3】:

    这段代码:

    System.IO.File.ReadAllLines(path)
    

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

    System.IO.File.ReadAllText(path)
    

    【讨论】:

    • 好的。这是另一种方法。但 readAllLines 确实有效。
    • 最好的方法,没有并发症。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2015-10-02
    • 2013-10-17
    • 2013-08-04
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多