【问题标题】:schema exception when encoding is set to utf-16编码设置为 utf-16 时的架构异常
【发布时间】:2011-07-02 06:34:02
【问题描述】:

我有一个以

开头的 xml 架构文件
<?xml version="1.0" encoding="UTF-16"?>

当我尝试将此架构文件添加到 XmlDocument 实例 Schemas 集合中时,我得到以下异常

没有 Unicode 字节顺序标记。无法切换到 Unicode。

如果我将编码更改为 UTF-8,API 工作正常。无论如何将这个 sceham 与 utf-16 一起使用?

【问题讨论】:

    标签: c# xsd


    【解决方案1】:

    如果它是 UTF-16 但没有 BOM,则它不是有效的 XML 文件。来自W3C XML 1.0 recommendation, 5th edition

    以 UTF-16 编码的实体必须和以 UTF-8 编码的实体可以以 [ISO/IEC 10646:2000] 的附件 H、[Unicode 的 16.8 节] 中描述的字节顺序标记开头](零宽度无间隔字符,#xFEFF)。这是一个编码签名,不是 XML 文档的标记或字符数据的一部分。 XML 处理器必须能够使用此字符来区分 UTF-8 和 UTF-16 编码的文档。

    基本上,它可以使用 UTF-16,但您需要一个字节顺序标记。或者首先使用 UTF-8,当然...

    【讨论】:

    • 如何在此处添加和使用字节顺序标记?我读到这是第一个字符,但是当尝试添加它时,没有运气以编程方式读取 xml。任何想法我可能会错过什么?任何例子都会有所帮助。
    • @imak:如果文件是 UTF-16,则该文件应该已经一个...否则它不是有效的 XML 文件。但是,如果没有,您可以将其加载到文本编辑器中并要求使用 BOM 显式保存。如果绝对必要,您可以使用 File.ReadAllText 将其全部读入字符串,然后使用 File.WriteAllText 和设置了 BOM 标志的 UnicodeEncoding 实例再次将其写出。
    猜你喜欢
    • 2021-12-20
    • 2012-03-13
    • 1970-01-01
    • 2016-01-02
    • 2012-06-30
    • 2012-06-20
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多