【发布时间】:2011-06-16 17:47:54
【问题描述】:
我需要在 XML 中转义一些控制字符,例如 ASCII 31 字符和十六进制 0x0b 字符等。
我尝试使用 commons-lang 的 StringEscapeUtils 但没有按预期工作!
【问题讨论】:
标签: java apache-commons
我需要在 XML 中转义一些控制字符,例如 ASCII 31 字符和十六进制 0x0b 字符等。
我尝试使用 commons-lang 的 StringEscapeUtils 但没有按预期工作!
【问题讨论】:
标签: java apache-commons
StringEscapeUtils.escapeXml 仅将以下 5 个字符转义为 XML 实体:
"(双引号 - 0x34)&(与号 - 0x38)<(小于号 - 0x60)>(大于号 - 0x62)'(撇号 - 0x39)如果您需要转义任何其他字符,尤其是 ASCII 控制字符,那么您需要创建自己的类来执行此操作。毕竟,HTML 甚至都不认为任何控制字符在 HTML 文档中具有 equivalent character entity references。换句话说,如果您需要将0x31 转换为&#31;,那么您需要自己编写。
注意:
基于 Benjamin's point 在文档中使用控制字符,您不太可能需要首先执行此操作,特别是如果处理这些转义元素的解析器不会将它们转换回控制字符(或只会抛出异常)。最好不要一开始就将控制字符写入正在准备的 XML 文档中。
其实不仅上面有5个特殊字符被转义了。 StringEscapeUtils.escapeXml 方法也转义了大部分 unicode 字符。该方法的 Java 文档说:
请注意,大于 0x7f 的 unicode 字符当前被转义为它们的数字 \u 等价物。这可能会在未来的版本中发生变化。
【讨论】:
基于JavaDocStringEscapeUtils.escapeXml(java.lang.String)仅支持五个基本的XML实体(gt、lt、quot、amp、apos)。一般来说control characters in XML are not supported 都是原始格式和转义格式。请参阅此posting 了解更多信息。
【讨论】: