十六进制数0X19是无效字符。

9

所以,

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

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

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

我该如何解决这个问题?我已经花费了大约6个小时来尝试解决问题。

请帮帮我。


我自己也遇到了这个错误。 :) 该字符被称为“介质结束”字符。可以在此处查看更多信息:http://www.fileformat.info/info/unicode/char/19/index.htm。 - Dan Atkinson
4个回答

15

简单来说,在XML文档中无论你如何标记,都不允许使用该字符。引用规范的话:

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

大致翻译一下,这意味着在0x20之前,你只能使用制表符(0x09)、换行符(0x0a)和回车符(0x0d)。

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


2
十六进制代码0x19是ASCII序列中的控制码,它是“媒介结束(EM)”的意思。我不确定它是如何进入您的数据流中的。如果您将某些需要多个字节编码的内容编码为UTF-8,然后将其视为单字节字符集或其他类似的编码/解码序列,那么您可能会看到UTF-8序列的第二个字节。

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


3
如果您打开智能引号功能并复制粘贴一个Microsoft Word文档,就可以获得这些值。我们的Oracle数据库是US7ASCII,所以也许Unicode被存储了,但只有最后两个字符被保存了? 这些“智能”单引号和“智能”双引号被存储为十六进制18、19、1C、1D: https://dev59.com/4XE85IYBdhLWcg3wVh84 证明: http://i.imgur.com/hVpv7NB.jpg - Sun

-1
我曾经看到过类似的错误,这些错误通常是由于XML标签或属性名称中包含无效字符引起的。例如,如果在手动构建XML时没有包括空格,就会出现此类错误。
 <tagNameattributeName="attributeValue">

会抛出错误而不是预期的结果

 <tagName attributeName="attributeValue">

值得一看。


-1

试试用 0x19 吧 :)

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接