为什么三引号字符串中的“\ 1”评估为unicode 0x1代码点

时间:2016-05-13 16:45:41

标签: groovy heredoc unicode-escapes

我想要一个包含文字\1的字符串。

我做的是(真正的字符串更长,但并不重要):

'''
 \1
'''

导致包含unicode 0x1代码点的String。

我认为我应该做的就是逃避这样的反斜杠:

'''
 \\1
'''

我不明白为什么Groovy没有在这里报告错误。我认为unicode转义是supposed to look like \u1

当我尝试将此String放入XML元素时,我得到了运行时异常,而不是语法错误:

An invalid XML character (Unicode: 0x1) was found in the element content of the document.

1 个答案:

答案 0 :(得分:2)

\(反斜杠)符号为escape symbol。如果你的意思是按字面意思使用它,你必须自己逃避它:\\

当您转义任何字符时,该字符被解释为具有特殊含义。在\1序列的情况下,恰好可以将其解释为0x01代码点。

Java Strings中也是如此。

如果您不想在Groovy中转义字符,请使用slashy strings

def x = /\1/
assert x == "\\1"

也可以作为多线:

def x = /
\1
/