我需要在XML中留出一些控制字符,如ASCII 31字符和十六進制0x0b字符等。Apache commons-lang StringEscapeUtils不會轉義XML
我試過使用Commons-lang的StringEscapeUtils,但是不按預期工作!
我需要在XML中留出一些控制字符,如ASCII 31字符和十六進制0x0b字符等。Apache commons-lang StringEscapeUtils不會轉義XML
我試過使用Commons-lang的StringEscapeUtils,但是不按預期工作!
StringEscapeUtils.escapeXml逃逸只有以下5個字符轉換成XML實體:
"
(雙引號 - 0x34
)&
(&符號 - 0x38
)<
(小於號 - 0x60
)>
(大於號 - 0x62
)'
(撇號 - 0x39
)如果你需要轉義任何其它字符,尤其是ASCII控制字符,那麼你就需要推出自己的類,它這一點。畢竟,HTML中沒有任何控制字符被認爲在HTML文檔中有equivalent character entity references。換句話說,如果您需要將0x31
轉換爲
,那麼您需要自己編寫它。
注:
在文檔中使用的控制字符基於Benjamin's point,這是不可能的,你需要做的這個擺在首位,尤其是如果處理這些逃脫元素不會改變解析器他們回到控制字符(或者只是拋出一個異常)。你最好不要將控制字符寫入正在準備的XML文檔中。
基於JavaDocStringEscapeUtils.escapeXml(java.lang.String)
僅支持五個基本的XML實體(gt,lt,quot,amp,apos)。一般control characters in XML are not supported都是原始格式和轉義格式。有關更多信息,請參閱此posting。
+1指出的控制字符非法。 – 2011-06-16 18:01:16
實際上不僅 5個特殊字符被轉義。方法StringEscapeUtils.escapeXml
也逃脫了大多數unicode字符。該方法的java文檔說:
請注意,大於0x7f的unicode字符當前已轉義爲其數值\ u等同值。這在未來的版本中可能會改變。
我已經發現這很有http://wush.net/svn/mindprod/com/mindprod/entities/EntifyStrings.java – 2011-06-16 18:11:15