【问题标题】:XML UTF-8 encoding checkingXML UTF-8 编码检查
【发布时间】:2010-10-26 02:48:01
【问题描述】:

我有一个这样的 XML 结构,一些学生项目包含无效的 UTF-8 字节序列,这可能导致整个 XML 文档的 XML 解析失败。

我想要做的是,过滤掉包含 UTF-8 字节序列的 Student 项目,并保留有效的字节序列。有关如何在 .Net 中执行此操作的任何建议或示例(首选 C#)?

顺便说一句:我的意思是无效的字节序列 => http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences

<?xml version="1.0" encoding="utf-8"?>
<AllStudents>
  <Student>
    Mike
  </Student>
  <Student>
    (Invalid name here)
  </Student>  
</AllStudents>

提前致谢, 乔治

【问题讨论】:

    标签: c# .net xml validation utf-8


    【解决方案1】:

    这很难做到。您不会让 XML 解析器解析包含无效字符的文档,因此我认为您的选择只有几个:

    1. 找出编码错误的原因 - 一个常见问题是当文档实际上是用 Latin-1 编写时,将文档标记为 UTF-8(或没有编码声明)。
    2. 用手取出坏的部分。
    3. 尝试找到一个用于 .NET 的 tag soup 解析器,它会在出错后继续解析。
    4. 拒绝无效的 XML 文档。

    【讨论】:

    • 有什么方法可以使用正则表达式进行此类检查?
    • 顺便说一句:标签汤适用于 Java,而不是 .Net?
    【解决方案2】:

    我不懂C#,所以恐怕我不能给你代码来做这个,但基本的想法是把整个文件作为一个utf-8文本文件读取,使用DecoderFallback用问号字符或 unicode 字符 0xFFFD 替换无效序列。然后将文件写回为 utf-8 文本文件,并对其进行解析。

    基本上你把“清除坏的utf-8序列”的操作和“解析xml文件”的操作分开了。

    在运行 XML 解析器读取固定数据之前,您甚至应该能够跳过再次写回文件;应该有某种方法可以将文件写入内存字节流并将该字节流解析为 XML。 (再次,很抱歉不懂 C#)

    【讨论】:

      【解决方案3】:

      XML encoding issue很近。

      【讨论】:

      • 这个问题是关于如何检查整个 XML 文档是否有效,而这个问题是关于如何过滤掉无效的。对这个问题有什么想法吗?
      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 2011-03-16
      • 2011-05-09
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2020-09-15
      • 2010-12-01
      相关资源
      最近更新 更多