我有一个从 NCLOB 列中提取文本并通过 XML 返回数据的 Web 服务。NCLOB 列是通过从文档中提取文本来填充的,因此有时会在 XML 中放置无效的 XML 字符,从而导致消费系统失败。
根据W3C,有效字符的范围是:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
/* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
我们已经尝试了几种不同的 RegExp 模式,我们已经接近了,但我们还没有完全做到。这是我们最近的一次。除高代理项 (DB9B - DBFF) 外,所有无效字符都将被替换。
REGEXP_REPLACE(
TEXT,
'[^[:print:]' || chr(13) || chr(10) || ']|[' || UNISTR('\FFFE-\FFFF') || ']',
'*')
我们也试过这个,但没有一个替代品 (D800 - DFFE) 被替换。
REGEXP_REPLACE(REPLACE(TEXT, unistr('\0000'), ' '),
'[' || unistr('\0001-\0008') || ']'
|| '|[' || unistr('\000B-\000C') || ']'
|| '|[' || unistr('\000E-\001F') || ']'
|| '|[' || unistr('\D800-\DFFF') || ']'
|| '|[' || unistr('\FFFE-\FFFF') || ']',' ')
我们如何匹配高代理?任何想法或指导将不胜感激。