2009-06-24 41 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

相關問題