QString 新增了两个函数 JavaEscape 和 JavaUnescape 来处理字符串的转义。实际上,它的转义规则和 C++/C# 基本一致,所以同样的处理也适应于 C++/C# 函数。
目前该函数支持的转义序列包括:
- ASCII 码 7 至 13 对应的转义符,分别是:
7 -> \a
8 -> \b
9 -> \t
10 -> \n
11 -> \v
12 -> \f
13 -> \r - 特殊字符:
\ -> \\
‘ -> \’
” -> \” - 除空格(ASCII 码 32) 到 ~ 之间的所有字符,如果指定 ADoEscape 为 true 时,会转义为 \uHHHH 的十六进制 Unicode 内码表示
相比转义, JavaUnescape 额外支持:
- \? 会转义为 ?
- \xHH 会转义为十进制 HH 对应的字符
- \UHHHHHHHH 会转义为十六进制 HHHHHHHH 所对应的字符(一般是扩展区字符,C# 规则对应0x10000~0x1FFFF之间的字符,JavaUnescape 不对范围进行检查)
- \OOO 会转义为八进制 OOO 所对应的字符,其中数字最多3个不超过7的数字,第一个不超过3
- 如果启用 AStrictEscape 限制,则无效的转义序列会抛出异常,如果不启用,则会忽略掉转义符,例如:
\joke 会被转换为 joke ,而不是 \joke