gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:38:25 30 4
gpt4 key购买 nike

我正在从 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 上无效。

在数据库中,数据永远是一个空字符串。它永远不会为“空”在 XML 文件中,它显示为 < data>< /data> ,即打开和关闭之间没有字符。 (但不确定这是否可以依赖,因为我从“立即”窗口中拉出它是 vis studio 并将其粘贴到文本板中)。

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 字符。您必须将消费过程分解为单独的步骤,检查每个步骤的输出,并缩小引入不良字符的范围。

检查文件编码(UTF-16)

更新:我自己也遇到过这样的例子!发生的事情是生产者将 XML 编码为 UTF16,而消费者期望使用 UTF8。由于 UTF16 使用 0x00 作为所有 ASCII 字符的高字节,而 UTF8 不使用,因此消费者将每隔一个字节视为 NUL。在我的例子中,我可以更改编码,但建议所有 XML 有效负载都以 BOM 开头。

关于.net - 十六进制值 0x00 是无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11036799/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com