微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 十六进制值0x00是无效字符

我正在从一个StringBuilder生成一个 XML文档,基本类似于:
string.Format("<text><row>{0}</row><col>{1}</col><textHeight>{2}</textHeight><textWidth>{3}</textWidth><data>{4}</data><rotation>{5}</rotation></text>

后来,像:

XmlDocument document = new XmlDocument();
document.LoadXml(xml);
XmlNodeList labelSetNodes = document.GetElementsByTagName("labels");
for (int index = 0; index < labelSetNodes.Count; index++)
{
    //do something
}

所有数据都来自数据库.
最近我有一些问题的错误

Hexadecimal value 0x00 is a invalid character,line 1,position nnnnn

但它不一致.
有时候一些“空白”的数据将会起作用.
错误”的数据适用于某些PC,但不适用于其他PC.

数据库中,数据始终为空白字符串.它永远不是’null’
在XML文件中,它出现为<数据>< / data>,即打开和关闭之间没有字符. (但不知道如果这个可以依赖,因为我从“立即”窗口拉动它,而是将其粘贴到文本框中).

sql server的版本可能有所不同(2008年将会失败,2005将会起作用)和排序规则.
不确定这些是否可能是原因?

但完全相同的代码和数据有时会失败.任何想法的问题在哪里?

解决方法

没有您的实际数据或来源,我们很难诊断发生了什么.但是,我可以提出几点建议:

> Unicode NUL(0x00)在所有版本的XML中是非法的,并且验证解析器必须拒绝包含它的输入.
>尽管如此;真实的未经验证的XML可以包含任何可以想象的垃圾不合格的字节.
> XML 1.1允许零宽度和非打印控件字符(NUL除外),因此您不能在文本编辑器中查看XML 1.1文件,并告诉它包含哪些字符.

鉴于您写的内容,我怀疑将数据库数据转换成XML的任何数据都被破坏;它传播非XML字符.

创建一些具有非XML字符(NUL,DEL,控制字符等)的数据库条目,并在其上运行XML转换器.将XML输出文件,并在十六进制编辑器中查看.如果它包含非XML字符,则转换器将被破坏.修复它,或者如果不能,创建一个使用这样的字符拒绝输出的预处理器.

如果转换器输出看起来不错,则问题在于您的XML消费者;它在某处插入非XML字符.您将不得不将您的消费过程分解为单独的步骤,检查每个步骤的输出,并缩小引入不良字符的内容.

原文地址:https://www.jb51.cc/mssql/82362.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐