2013-01-11 44 views
2

我知道我需要在所有的情況下逃脫這些:如果我的XML文檔指令指定了UTF-8的編碼,我還需要轉義字符嗎?

quot " 
amp & 
apos ' 
lt < 
gt > 

但是,我們有重音國際字符,或俄語字符來命名一對夫婦。當我的編碼指令設置爲UTF-8時,是否需要轉義此類型的字符?

如果我將編碼指令設置爲ASCII?我是否需要逃避所有這些角色?

這是XML的一個樣本(從舊系統),我試圖重現使用引入nokogiri(lib2xml):

<?xml version="1.0" encoding="UTF-8"?> 
    <DESCRIPTION lang="rus"> 
    <SHORT_DESCRIPTION>&#1052;&#1054;&#1044;&#1059;&#1051;&#1068;- ELECTRONIC OUTPUT 120 V DC 5 mA</SHORT_DESCRIPTION> 
    <LONG_DESCRIPTION>&#1052;&#1054;&#1044;&#1059;&#1051;&#1068;- &#1058;&#1048;&#1055; ELECTRONIC OUTPUT &#1042;&#1061;&#1054;&#1044; 120 V DC &#1042;&#1067;&#1061;&#1054;&#1044; 5 mA &#1048;&#1057;&#1058;&#1054;&#1063;&#1053;&#1048;&#1050; &#1055;&#1048;&#1058;&#1040;&#1053;&#1048;&#1071; 120 V DC &#1044;&#1054;&#1055;&#1054;&#1051;&#1053;&#1048;&#1058;&#1045;&#1051;&#1068;&#1053;&#1040;&#1071; &#1044;&#1045;&#1058;&#1040;&#1051;&#1068; 1 ANALOG SM322-8S TOR</LONG_DESCRIPTION> 
</DESCRIPTION> 

你可以看到,樣品中的說明書上說UTF-8,但他們已經逃脫了很多字符,當我指定ASCII編碼指令時,Nokogiri只能轉義字符。這讓我感到困惑。

編輯2:如果我沒有傳遞一個編碼指令給Nokogiri,生成的XML會將所有俄文字符留在他們的本地西裏爾字母表中,但這不符合我需要複製的XML。

+2

不,你不知道。但要確保你實際上將文件編碼爲UTF-8 ...只是簡單地使用encoding =「UTF-8」屬性並不能實現。 – Esailija

+0

Esailija說得很好。這裏有兩件事 - 聲明的編碼,它告訴解析器文檔編碼,以及用於將字符數據寫入編碼的八位字節的編碼。它們必須匹配或解析器使用錯誤的解析器,並在讀取數據時破壞數據。 – McDowell

+0

我添加了一個示例pf我需要複製的xml,它表示在說明中編碼UTF-8,但轉義字符不應該因爲它們是有效的UTF-8而被轉義。 – holaSenor

回答

2

你只需要來表示一個字符一個字符引用如果任:

  • 它必須在當前背景下具有特殊意義(所以你列出的五個字符只需要有時編碼)
  • 它確實不存在於編碼文件的字符中

ASCII在其中沒有許多字符,所以如果你用ASCII編碼你的XML,你將不得不爲許多字符使用字符引用。

不要用ASCII編碼您的XML。 XML的默認編碼是UTF-8,它得到了很好的支持。

+0

我編輯了這個問題來添加更多的細節。我是否應該假設如果在指定UTF-8編碼指令時libxml2不會轉義字符,那麼它是有效的,並且應該在所有xml解析器中都有效? – holaSenor

+2

是的。 (-------------------- StackOverflow不喜歡簡短的回答,所以我很長) –

相關問題