我需要在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