为什么三引号字符串中的“\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 = /
/
我想要一个包含文本的字符串 </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 = /
/