2016-05-13 3 views
1

テキストを含む文字列が必要です。\1私が何をしたか三重引用符で囲まれた文字列の中の " 1"がユニコード0x1コードポイントに評価されるのはなぜですか

は、(実際の文字列が長かったが、それは重要ではありません)であった。

''' 
\1 
''' 

ユニコード0x1コードポイントを含む文字列をもたらしました。

は、私はちょうどこのようにバックスラッシュをエスケープされてやったべきだと思う:Groovyのは、ここでエラーを報告しなかった理由

''' 
\\1 
''' 

は、私が理解していないことです。ユニコードのエスケープは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 Stringsでも同じです。

あなたは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。スラッシュな文字列 - 素晴らしい提案ですが、私は実際には補間をそこで動作させたくありません –

関連する問題