【问题标题】:hexadecimal 0X19 is an invalid character十六进制 0X19 是无效字符
【发布时间】:2009-08-24 23:54:41
【问题描述】:

所以,

我正在使用 XMLWriter 根据数据集中的值构建 XML 字符串。

它正在根据我指定的设置和条件正确构建 xml 字符串。

如果数据集中有超过 1000 条记录,并且当我尝试构建 xml 字符串时,我会收到上述错误。十六进制 0X19 是无效字符

我如何通过这个。我花了大约 6 个小时试图弄清楚。

请帮忙

【问题讨论】:

标签: xml


【解决方案1】:

很简单,在 XML 文档中不允许使用该字符,无论您如何标记它。引用spec

字符 ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

粗略翻译,就是在 0x20 之前,只允许制表符 (0x09)、换行符 (0x0a) 和回车符 (0x0d)。

解决此类问题的常规方法是使用另一种嵌入式编码,例如base64

【讨论】:

    【解决方案2】:

    Hex 0x19 是ASCII sequence 中的控制代码 - 它是媒体结束 (EM)。我不确定它是如何进入您的数据流的。如果您将需要超过一个字节的内容编码为 UTF-8,然后将其视为单字节字符集或其他类似的编码/解码序列,您可能会看到 UTF-8 序列的第二个字节。

    您是否正在从一个字符集转码到另一个字符集?以及输入和输出编码是什么?

    【讨论】:

    • 如果您复制并粘贴打开了智能引号的 Microsoft Word 文档,您可以获得这些值。我们的 Oracle 数据库是 US7ASCII,所以也许存储了 unicode 但只保存了最后两个字符?这些“智能”单引号和“智能”双引号被存储为十六进制 18、19、1C、1D:stackoverflow.com/questions/2826191/… 证明:i.imgur.com/hVpv7NB.jpg
    【解决方案3】:

    改用 0x19 :)

    十六进制(以 16 为底)使用 16 个符号,分别是 0 到 9 和 A B C D E F(或 a 到 f,代表 10 到 15)

    0x 只是编程语言(如 C)和 shell 中数字常量的前缀

    【讨论】:

      【解决方案4】:

      我已经看到 XML 标记和/或属性名称中的无效字符出现类似错误。例如,如果您在手动构建 xml 时不包含空格,

       <tagNameattributeName="attributeValue">
      

      会抛出与预期相比的错误

       <tagName attributeName="attributeValue">
      

      可能值得一看。

      【讨论】:

        猜你喜欢
        • 2016-08-05
        • 1970-01-01
        • 2012-06-17
        • 2016-11-14
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 2013-07-30
        相关资源
        最近更新 更多