1

text を含む String が必要\1でした。

私がしたことは(実際の文字列はもっと長いですが、重要ではありません):

'''
 \1
'''

その結果、Unicode0x1コードポイントを含む文字列が生成されました。

私がすべきだったのは、次のようにバックスラッシュをエスケープすることだと思います:

'''
 \\1
'''

私が理解できないのは、Groovy がここでエラーを報告しなかった理由です。Unicodeエスケープは次のようになるはず\u1だと思いましたか?

この文字列を XML 要素に入れようとしたときに、構文エラーの代わりに実行時例外が発生しました。

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

1 に答える 1

2

(\バックスラッシュ) 記号はエスケープ記号です。文字どおりに使用する場合は、それ自体をエスケープする必要があります: \\.

文字をエスケープすると、その文字は特別な意味を持つと解釈されます。シーケンスの場合、\1たまたまこれが0x01コードポイントとして解釈されることがあります。

これは Java Strings でも同じです。

Groovy で文字をエスケープする必要がないようにするには、スラッシュ文字列を使用します。

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

複数行としても機能します:

def x = /
\1
/
于 2016-05-15T12:14:10.163 に答える