关于这个问题:removing invalid XML characters from a string in java,在@McDowell回复中,他/她说删除无效XML字符的方法是:
String xml10pattern = "[^"
+ "\u0009\r\n" // #x9 | #xA | #xD
+ "\u0020-\uD7FF" // [#x20-#xD7FF]
+ "\uE000-\uFFFD" // [#xE000-#xFFFD]
+ "\ud800\udc00-\udbff\udfff" // [#x10000-#x10FFFF]
+ "]";
然后:
replaceAll(xml10pattern, "");
嗯,我有两个问题:
\\u0009\\u000A\\u000D...
,而不是\u0009\r\n
,就像我在@ ogrisel的回复中看到的那样:Stripping Invalid XML characters in Java (U+10000–U+10FFFF)
如何转换为"\ud800\udc00-\udbff\udfff"
。不能是"\u10000-\u10FFFF"
吗? 我真的必须检测或过滤这种角色,我不完全确定如何做到这一点。
顺便说一下,这必须适用于JDK 1.5(因此,不允许使用像\x{h...h}
这样的表达式)
非常感谢。
====== UPDATE ==
我想要检测String str
是否包含此类无效字符的方式是:
if (!str.replaceAll(pattern, "").equals(str)) {
// Contains non XML valid characters.
}
非常欢迎任何其他建议;)
答案 0 :(得分:1)
1)它有两种工作方式,\u0009
是java转义序列,\\u0009
是正则表达式转义序列
2)Java String是UTF-16编码的,U + 10000是用2个16位字符\ud800\udc00
编码的,参见Character API Unicode Character Representations