gpt4 book ai didi

java - 去除无效 XML 字符的转义序列

转载 作者:行者123 更新时间:2023-12-01 14:08:34 26 4
gpt4 key购买 nike

根据XML spec ,只有以下字符是合法的:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

我有一个名为 foo 的字符串,其中包含对象的 JSON 表示形式。 JSON 对象的某些字符串包含 XML 中非法字符的转义序列,例如\u0002\u000b

我想在将 foo 扔到 JSON 到 XML 转换器之前将其剥离出来,因为该转换器是一个黑匣子,无法处理这些无效字符。

我想做的事情的示例:

MAGIC_REGEX = "<here's what needs to be found>"  # TODO

String foo = "\\u0002bar b\\u000baz qu\\u000fx"
String clean_foo = foo.replace(MAGIC_REGEX, "�") # � Unicode replacement character

System.out.println(clean_foo) # Output is "bar baz qux"

我怎样才能实现这一目标?使用正则表达式而不是解析字符串并比较 Unicode 代码点的解决方案可以获得加分。

我知道 this SO question 。但是,我的问题是非法字符的转义序列,而不是真正的字符本身。

最佳答案

我最终想出了这个正则表达式,它根据 XML 规范匹配几乎所有非法字符,除了 #x10000 上面的字符(#x11000 及以后):

# case-sensitive version
\\\\u(00(0[^9ADad]|1[0-9A-Fa-f])|D[8-9A-Fa-f][0-9A-Fa-f]{2}|[Ff]{3}[EFef])

# case-insensitive version
\\\\u(00(0[^9ad]|1[0-9a-f])|D[8-9a-f][0-9a-f]{2}|fff[ef])

关于java - 去除无效 XML 字符的转义序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com