XML 规范和 UTF-16

2023-12-21

第 4.3.3 节 http://www.w3.org/TR/REC-xml/#charencoding and 附录F http://www.w3.org/TR/REC-xml/#sec-guessing of the XML 1.0 规范 http://www.w3.org/TR/REC-xml/谈论UTF-16 https://en.wikipedia.org/wiki/UTF-16, the 字节顺序标记 (BOM) https://en.wikipedia.org/wiki/Byte_order_markUTF-16 编码的数据流和 XML 编码声明。从这些部分的信息来看,UTF-16 文档中似乎需要字节顺序标记。但附录 F 中的汇总图表给出了一个场景,其中 UTF-16 输入没有字节顺序标记,但此场景有 xml 声明。根据第 4.3.3 节,UTF-16 编码的文档不需要编码声明(在这种情况下,XML 声明本身是可选的)。

鉴于此信息,如果文档的其余部分是格式良好的,那么既没有 BOM 也没有 XML 声明且也缺乏外部提供的编码信息的 UTF-16 xml 文档是否被视为格式良好?


来自 Unicode 6.2 规范(第 99 页):

UTF-16 编码方案可能以 BOM 开头,也可能不以 BOM 开头。然而,当没有BOM,并且没有更高层协议的情况下,UTF-16编码方案的字节顺序是big-endian。

因此 UTF-16 文档中不需要 BOM。但可能有一个“更高级别的协议”,例如 XML 规范,来指示对于没有 BOM 的 UTF-16 XML 文档需要做什么。

XML 1.0 规范中的 4.3.3 节说:

以 UTF-16 编码的实体必须和以 UTF-8 编码的实体可以以 [ISO/IEC 10646:2000] 附录 H、[Unicode] 第 16.8 节(零宽度无中断空格字符)描述的字节顺序标记开头,#xFEFF)。

我们稍后再回到上面。附录 F 描述了在 BOM 不存在的情况下检测字符编码的方法。但我认为该部分与您的问题无关,因为您询问没有 BOM 且没有 XML 声明的 UTF-16 XML 文档是否“格式良好”,并且附录 F 是规范的非规范部分。

因此,回到规范,如果“作为一个整体,它与生产标记文档相匹配”,则该文档是格式良好的。 (第 2.1 节)。审阅document表明 XML 声明是可选的(这也在 2.8 节中提到)。因此,无需 XML 声明即可拥有格式良好的文档;这回答了你一半的问题。

另一半是没有 XML 声明但也没有 BOM 的 UTF-16 XML 文档是否仍然是格式良好的。第 4.3.3 节中写道(强调我的):

在缺乏外部传输协议(例如 HTTP 或 MIME)提供的信息的情况下,对于包含编码声明的实体来说,以声明中指定的编码以外的编码呈现给 XML 处理器是一个致命错误,或者对于既不以字节顺序标记也不以编码声明开头的实体使用 UTF-8 以外的编码.

基于此,没有 BOM 且没有编码声明(这是 XML 声明的一部分)的 UTF-16 XML 文档不是格式良好的文档(因为致命错误违反了格式良好性,请参阅第 5 节中格式良好性约束的定义1.2)在没有外部信息的情况下。这也符合前面第 4.3.3 节中所说的有关 UTF-16 的 BOM 要求的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 规范和 UTF-16 的相关文章

随机推荐

  • python、matplotlib、svg 和文本标签中的超链接

    In 绘图库 http matplotlib sourceforge net 有可能使用超链接创建 SVG 图形 http matplotlib sourceforge net examples pylab examples hyperli
  • Android 上 GZIPInputStream 的截断输出

    我一定做错了什么 在 Android 上运行以下代码会生成截断的文件 items 日志中没有任何异常或问题 使用 OpenJDK 7 运行相同的代码 它可以正确解压缩文件 try final InputStream fis new GZIP
  • C - 测量计算时间

    有没有简单的方法来测量C中的计算时间 我在执行时尝试了时间实用程序 但我需要测量程序的特定部分 Thanks 您可以使用clock函数于
  • 如何使用NAudio的BiQuadFilter?

    我使用 NAudio 录制麦克风的声音并将其保存在文件中 我用这个 public WaveFileWriter m WaveFile null m WaveFile new WaveFileWriter strFile m WaveSour
  • Windows cmd 模拟控制台输入命令

    我需要编写一个批处理脚本 当用户名和密码保存在某处 例如 在文件中 时 该脚本会自动连接到 VPN VPN 客户端是 openconnect 它提供了 CLI 但问题是需要以交互方式向命令提供用户输入才能完成 当我运行时请参阅下面的输出 o
  • 为 Spring MVC/AOP 应用程序实现动态菜单

    我希望为我的 Spring MVC 应用程序实现动态可更改的菜单 每当添加注释方法或控制器时更新 我想要的是引入新的注释 RequestMenuMapping 这将去 Controllerbeans 及其方法 就像 RequestMappi
  • 如何将 TLS 1.0 与 Python 3.8 结合使用?

    我有一个使用 Jira 连接的代码jira module 不幸的是 Jira 服务器仅支持SSLv3 and TLS1 我知道它们是旧协议 今年年底前主办方将接受新的 但在那之前我需要我的 python 代码来使用 Jira 连接TLS1
  • 将文件上传到 FTP 一旦到达目的地就会损坏

    我正在创建一个简单的拖动文件并自动上传到 ftp Windows 应用程序 我正在使用MSDN代码 http msdn microsoft com en us library ms229715 aspx将文件上传到 FTP 代码非常简单 G
  • Rails 5、Gmaps4Rails - 设置

    多年来我一直在尝试找出如何将 gmaps4rails 合并到 Rails 应用程序中 我制作了一个全新的应用程序并尝试了新的 我不知道出了什么问题 我正在寻找完整且最新的设置说明 许多 SO 帖子都提到了旧版本的依赖项 最终表明该问题已在更
  • 在 python 脚本中更改为 sudo 用户

    我有个问题 我正在编写一个软件 需要它来执行需要用户处于 sudo 模式的操作 运行 sudo python filename py 不是一个选项 这引出了我的问题 有没有办法通过 python 脚本更改为 sudo 安全性不是问题 因为用
  • C# String.Format 参数

    我有一个像这样的数组 object args 并且需要将这些参数插入字符串中 例如 str String Format Her name is 0 and she s 1 years old args 代替 str String Forma
  • Vite 服务器正在运行,但无法在本地主机上运行

    Vite Reactjs 服务器正在运行 但我得到了 找不到该本地主机页面 未找到该网址的网页 https localhost 4200 在浏览器上 从 create React app react scripts 迁移到 Vite 时的一
  • 如何知道数据何时加载到自定义 RecyclerView 中?

    我正在我的应用程序中创建并使用自定义 RecyclerView 我需要打电话getChildAt 0 getWidth 在任何工作之前保存类字段中的第一个项目宽度 为此 我需要在适配器中加载数据时捕获 否则 getChildAt 0 将返回
  • JPA:可嵌入类中的外键

    我有以下情况需要解决 但无法使其工作 尝试过 Hibernate 和 EclipseLink Table 1 Column A is Primary Key some other columns do follow Table 2 Colu
  • 刷新浏览器地址栏时如何重置CSS(a:visited {color:green})

    我已经成功测试了 XHTML 文档标签上的访问链接效果 但是当我刷新时 那些以绿色突出显示的访问过的链接无法删除 浏览器上的地址栏 除非我单击清除每个浏览器上的所有浏览器缓存和历史记录 那么问题是如何在单击浏览器刷新按钮时重置所有CSS而不
  • 取消数组输入框

    我试图使取消函数适用于我的数组 它适用于简单的输入框 但 Array InputBox 不太喜欢它 工作代码 If strVarValue vbNullString Then MsgBox User canceled WScript Qui
  • Git Merge -冲突样式 diff3 和合并之间的区别

    Context git merge考虑设置merge conflictStyle如果发生合并冲突 可能的值为merge 默认 和diff3 我注意到diff3有时会产生更大的冲突 参见下面的示例 我发现这张纸 https www cis u
  • 好奇心:为什么 Expression<...> 编译后的运行速度比最小的 DynamicMethod 更快?

    我目前正在做一些最后的优化 主要是为了乐趣和学习 并发现了一些给我留下了几个问题的东西 首先 问题 当我通过使用在内存中构造一个方法时动态方法 http msdn microsoft com en us library system ref
  • 查找至少一条 s-t 路径上出现的所有边

    我正在寻找一种算法来解决以下问题 输入 有向图 G 节点 s 和 t 输出 属于简单 st 路径一部分的所有边的集合 如果没有节点被访问两次 则路径是简单的 有人知道如何做到这一点吗 这个问题在 DAG 上很容易 因为所有路径都很简单 但是
  • XML 规范和 UTF-16

    第 4 3 3 节 http www w3 org TR REC xml charencoding and 附录F http www w3 org TR REC xml sec guessing of the XML 1 0 规范 http