Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 十六进制值0x00是加载XML文档的无效字符_C#_Xml_Byte Order Mark - Fatal编程技术网

C# 十六进制值0x00是加载XML文档的无效字符

C# 十六进制值0x00是加载XML文档的无效字符,c#,xml,byte-order-mark,C#,Xml,Byte Order Mark,我最近有一个无法加载的XML。错误消息是错误的 十六进制值0x00是无效字符 由LinqPad(C#语句)中的最少代码接收: 我用十六进制编辑器检查了XML,但找不到0x00字符。我将XML最小化为 <?xml version="1.0" encoding="UTF-8"?> <x> </x> 在我的十六进制编辑器中,它显示为 Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000

我最近有一个无法加载的XML。错误消息是错误的

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

由LinqPad(C#语句)中的最少代码接收:

我用十六进制编辑器检查了XML,但找不到0x00字符。我将XML最小化为

<?xml version="1.0" encoding="UTF-8"?>
<x>
</x>

在我的十六进制编辑器中,它显示为

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  FF FE 3C 00 3F 00 78 00 6D 00 6C 00 20 00 76 00  ÿþ<.?.x.m.l. .v.
00000010  65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22 00  e.r.s.i.o.n.=.".
00000020  31 00 2E 00 30 00 22 00 20 00 65 00 6E 00 63 00  1...0.". .e.n.c.
00000030  6F 00 64 00 69 00 6E 00 67 00 3D 00 22 00 55 00  o.d.i.n.g.=.".U.
00000040  54 00 46 00 2D 00 38 00 22 00 3F 00 3E 00 0D 00  T.F.-.8.".?.>...
00000050  0A 00 3C 00 78 00 3E 00 0D 00 0A 00 3C 00 2F 00  ..<.x.>.....<./.
00000060  78 00 3E 00                                      x.>.
偏移量(h)00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 FF FE 3C 00 3F 00 78 00 6D 00 6C 00 20 00 76 00ÿ。。。 000000 50 0A 00 3C 00 78 00 3E 00 0D 00 0A 00 3C 00 2F 00。。。。。。。。 所以很容易看出,任何地方都没有
00
字符。所有偶数列都包含
00
以外的值


为什么它会抱怨0x00字符无效?

问题在于编码。字节顺序标记
FF FE
用于UTF-16,但XML头定义了
encoding=“UTF-8”

如果您自己生成XML,则有两个选项:

a) 编写UTF-8头文件:
EF-BB-BF

b) 定义UTF-16编码:
encoding=“UTF-16”

如果您从其他人处接收XML,还有两个选项:

A) 告诉作者根据A)或b)修复XML


B) 清理应用程序中的输入(非首选)

+1。另一种黑客加载方式——首先读取字符串,然后从字符串中加载XML(在本例中,解析器将忽略编码)。@AlexeiLevenkov你的黑客方式对我不起作用。我是东安XDocument.Parse(data.getstring(“datafieldname”),它正在产生十六进制错误。@Mike你应该单独问一个问题,说明你的具体案例(链接到这篇文章将“显示研究成果”)。看看这个问题如何证明“最小”数据来重现这个问题,并考虑在新的问题中做类似的事情。
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  FF FE 3C 00 3F 00 78 00 6D 00 6C 00 20 00 76 00  ÿþ<.?.x.m.l. .v.
00000010  65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22 00  e.r.s.i.o.n.=.".
00000020  31 00 2E 00 30 00 22 00 20 00 65 00 6E 00 63 00  1...0.". .e.n.c.
00000030  6F 00 64 00 69 00 6E 00 67 00 3D 00 22 00 55 00  o.d.i.n.g.=.".U.
00000040  54 00 46 00 2D 00 38 00 22 00 3F 00 3E 00 0D 00  T.F.-.8.".?.>...
00000050  0A 00 3C 00 78 00 3E 00 0D 00 0A 00 3C 00 2F 00  ..<.x.>.....<./.
00000060  78 00 3E 00                                      x.>.