與可以執行任何操作的application/xml文件或將所有空白序列轉換爲單個空格字符的normalizedString值相反,我在這裏特別在帶有字符串值的text/xml文件的上下文中進行了詢問。爲了簡單起見,我們假設我只使用帶有UTF8編碼文件的ASCII字符。在text/xml值中編碼CR-LF換行符的正確方法是什麼?
考慮到以下兩行文本字符串我希望在XML來表示:
Hello
World!
這是在內存中的以下字節:
0000: 48 65 6c 6c 6f 0d 0a 57 6f 72 6c 64 21 Hello..World!
根據RFC 2046,任何文本/ * MIME類型必須(不應該)表示使用回車符後跟換行符字符序列的換行符。有鑑於此,下面的XML片段應該是正確的:
<tag>Hello
World!</tag>
或
0000: 3c 74 61 67 3c 48 65 6c 6c 6f 0d 0a 57 6f 72 6c <tag>Hello..Worl
0010: 64 21 3c 2f 74 61 67 3c d!</tag>
但我經常看到類似以下文件:
<tag><![CDATA[Hello
World!]]></tag>
或者,更奇怪的:
<tag>Hello&xD;
World!</tag>
其中& 0xD;序列之後是單個換行符:
0000: 3c 74 61 67 3c 48 65 6c 6c 6f 26 78 44 3b 0a 57 <tag>Hello&xD;.W
0010: 6f 72 6c 64 21 3c 2f 74 61 67 3c orld!</tag>
我在這裏丟失了什麼?在XML字符串值中表示多行文本的正確方法是什麼,以便它可以不受干擾地從另一端出來?
根據同一規範,CR(#d)是CDATA塊內有效的Char,所以不應該進行轉換。我將定義從CR LF輸入中獲取LF作爲被騷擾的回來。有沒有一種方法可以正確地對XML進行編碼,以便在接收端返回CR LF,還是XML剛剛斷開,並且不符合text/xml MIME類型? – AlwaysLearning 2013-02-25 13:18:52
在閱讀規範時,我將其解釋爲:如果在輸入中找到以下任何一個原始代碼點序列,請將其替換爲0xd 0xa:0xd 0x85,0x85,0x2028,0xd 「除0xa或0x85之外的任何其他」。由於此替換髮生在「解析之前」(請參閱參考資料),因此應保留任何文字字符實體(即「&#xd ')。因此,對於該示例,解析的內容應該是字節序列「0xd」而不是「0xa」。我是否正確閱讀規範?你的回答似乎表明這個替換可能會在解析**之後發生,而不是之前...... –
binki
2017-07-24 14:24:11