2016-05-13 154 views
1

我想要一個包含文本\1的字符串。爲什麼三引號字符串中的「 1」評估爲unicode 0x1代碼點

我所做的是(實線較長,但是這並不重要):

''' 
\1 
''' 

這導致含有一個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. 

回答

2

\(反斜槓)符號爲escape symbol。如果你的意思是直接使用它,你必須自己逃脫它:\\

當你逃離任何角色時,角色被解釋爲具有特殊含義。在\1序列的情況下,恰好可以將其解釋爲0x01碼點。

這在Java字符串中是一樣的。

如果你想不必用Groovy轉義字符,使用slashy strings

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

這也可以作爲多:

def x =/
\1 
/
+0

現在你指出來,我意識到它的[八進制轉義序列](https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.6) - 我可以發誓他們必須以'\ 0'開頭但顯然他們不是 –

+0

Re。斜槓字符串 - 很好的建議,但我實際上*不*要插值在那裏工作 –

相關問題