【问题标题】:SAXParser not throwing exception when encountered with invalid characterSAXParser 在遇到无效字符时不抛出异常
【发布时间】:2012-01-27 16:23:24
【问题描述】:

如果我在 ansi xml 文件中放入一个 utf8 字符 » 并尝试使用 SAXParser 解析它,那么它会被解析而没有任何错误。为什么它没有抛出任何异常?

示例 xml 文件。将其保存为 ansi 编码。 Chrome 无法打开文件,但 saxparser 解析它没有错误。

<?xml version="1.0" encoding="UTF-8"?>
 <root date="2010-06-17">
 <product
    id="1 "
    label= « xyz"/>
 </root>

w3c xml validator 也无法查看此文档。

【问题讨论】:

  • 如果 UTF-8 流损坏,应该会出现错误。简洁完整的代码示例?
  • "ANSI" 作为一个字符编码的名字已经很过时了!我认为微软在 1980 年代开始使用这个名称来表示 iso-8859-1,因为这是他们遇到的唯一 ANSI 标准。当然,他们还生产了自己的专有变体,最好称为 CP1252。

标签: java xml saxparser


【解决方案1】:

文档可能仍然格式良好。

我没有检查所有的 ANSI 字符集,但 » (U+00BB) 存在于 Windows-1252 中。如果您将 UTF-8 编码的字节序列C2 BB 转储到 Windows-1252 编码的文件中,它仍然是该编码的合法字节序列。 它将被视为字符序列» (U+00C2 U+00BB)。

【讨论】:

    【解决方案2】:

    » 如下:

    • U+00BB:Unicode 代码点
    • c2 bb : UTF-8 编码
    • 00 bb : 以 UTF-16 编码
    • bb : 在 8859-1/Windows 1252 中编码

    如果您将“c2 bb”放入正在读取为 win-1252 的文件中,它将出现 »。不需要错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2018-02-10
      • 1970-01-01
      • 2014-11-12
      相关资源
      最近更新 更多