2009-06-24 43 views
4

我有以下XML代码。什么导致我的XML中断?

<firstname> 
<default length="6">Örwin</default> 
<short>Örwin</short> 
<shorter>Örwin</shorter> 
<shortest>�.</shortest> 
</firstname> 

为什么“最短”节点的内容会中断?它应该是一个简单的“Ö”而不是繁琐的 。 XML是UTF-8编码的,处理该节点输出的函数还写入“short”和“short”的内容。 “Ö”清晰可见的地方。

+0

也许问题是,我得到了一个“O”与方法。我使用$ firstname {0}来提取名字的第一个字符。用UTF-8字符串这样做有问题吗? – individual8 2009-06-24 13:28:07

+2

这似乎是我在我的PHP脚本中使用了错误的内部编码。将其更改为mb_substr($ firstname,0,1,'UTF-8')以获取名字的第一个字符,并且它可以工作。 – individual8 2009-06-24 13:45:54

回答

17

我的猜测是XML不是正确 UTF-8编码。请在原始文件中的<shortest>元素内显示字节 ...我怀疑您会发现它们不是有效编码的字符。如果您可以展示一个简短但完整的程序,它可以从有效的输入中生成此XML,这将非常有帮助。 (最好说说它是哪个平台:)

编辑:在这个文件中很奇怪的东西正在进行。以下是十六进制值的 “短” 和 “最短” 的价值观:

短:C3 96 72 77 69 63

最短:EF BF BD 2E

现在 “C3 96” 是有效的U + 00D6的UTF-8编码,即“拉丁大写字母O,带分音符”,如你所愿。

但是,EF BF BD是U + FFFD的UTF-8编码,它是“替换字符” - 绝对是而不是你想要的。 (2E只是ASCII点。)

所以,这实际上是有效的UTF-8 - 但它不包含你想要的字符。再次,您应该检查创建文件的内容...

+1

你在学校打字课是不是? :) – kemiller2002 2009-06-24 12:33:43

相关问题