我需要在XML中使用一些控制字符,例如ASCII 31字符和十六进制0x0b字符等。
我尝试使用commons-lang的StringEscapeUtils但是没有按预期工作!
答案 0 :(得分:2)
StringEscapeUtils.escapeXml仅将以下5个字符转义为XML实体:
"
(双引号 - 0x34
)&
(&符号 - 0x38
)<
(小于标志 - 0x60
)>
(大于号 - 0x62
)'
(撇号 - 0x39
)如果你需要转义任何其他字符,尤其是ASCII控制字符,那么你需要滚动自己的类来执行此操作。毕竟,HTML甚至没有一个控制字符被认为在HTML文档中有equivalent character entity references。换句话说,如果您需要将0x31
转换为
,那么您需要自己编写。
注意:强>
基于Benjamin's point在文档中使用控制字符,你不太可能首先需要这样做,特别是如果处理这些转义元素的解析器不会将它们转换回控制字符(或者只是抛出异常)。最好不要将控制字符写入您正在准备的XML文档中。
答案 1 :(得分:2)
基于JavaDoc StringEscapeUtils.escapeXml(java.lang.String)
仅支持五个基本XML实体(gt,lt,quot,amp,apos)。一般control characters in XML are not supported都是原始格式和转义格式。有关详细信息,请参阅此posting。
答案 2 :(得分:2)
实际上不仅以上5个特殊字符被转义。方法StringEscapeUtils.escapeXml
也逃脱了大多数unicode角色。该方法的java文档说:
请注意,大于0x7f的unicode字符当前已转义为其等效的数字\ u。这可能会在将来的版本中发生变化。