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

Why does "\1" inside a triple-quoted string evaluate to a unicode 0x1 code point

我想要一个包含文本的字符串 </code>。</p> <p>我做的是(真正的字符串更长但不重要):</p> <pre><code>''' '''

这导致包含 unicode 0x1 代码点的字符串。

我想我应该做的就是像这样转义反斜杠:

'''
 \1
'''

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

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

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

\(反斜杠)符号是 escape symbol。如果你想按字面意思使用它,你必须自己转义它:\.

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

这在 Java 字符串中是相同的。

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

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

也可用作多行:

def x = /

/