检测到无效 XML 个字符
Detect non valid XML characters
关于这个问题:removing invalid XML characters from a string in java,在@McDowell 的回复中 he/she 说删除无效 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, "");
嗯,我有两个问题:
- 不应该转义所有 unicode 字符吗?我的意思是
\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}
这样的表达式)
非常感谢。
======更新======
我想检测 String str
是否包含此类无效字符的方法是:
if (!str.replaceAll(pattern, "").equals(str)) {
// Contains non XML valid characters.
}
非常欢迎任何其他建议 ;)
1) 它双向工作,\u0009
是 java 转义序列,\u0009
是正则表达式转义序列
2) Java 字符串是 UTF-16 编码的,U+10000 是用 2 个 16 位字符编码的 \ud800\udc00
,参见字符 API Unicode 字符表示
关于这个问题:removing invalid XML characters from a string in java,在@McDowell 的回复中 he/she 说删除无效 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, "");
嗯,我有两个问题:
- 不应该转义所有 unicode 字符吗?我的意思是
\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}
这样的表达式)
非常感谢。
======更新======
我想检测 String str
是否包含此类无效字符的方法是:
if (!str.replaceAll(pattern, "").equals(str)) {
// Contains non XML valid characters.
}
非常欢迎任何其他建议 ;)
1) 它双向工作,\u0009
是 java 转义序列,\u0009
是正则表达式转义序列
2) Java 字符串是 UTF-16 编码的,U+10000 是用 2 个 16 位字符编码的 \ud800\udc00
,参见字符 API Unicode 字符表示