Androidのstrings.xmlファイルのエラー


114

string.xmlアプリケーションで長い文字列を宣言しました。

このように宣言

<string name="terms">PLEASE READ THESE TERMS OF USE CAREFULLY  BY ACCESSING THIS .................</string>

ただし、これにより次のエラーが発生します。

error: Apostrophe not preceded by \ (in PLEASE READ THESE TERMS OF USE CAREFULLY

1
エラーは、文字列内のドットが多すぎるためです。`エラー:`が前にないアポストロフィはダミーのメッセージであり、問​​題はドットで示されています。私が覚えているように、3つ以上のドットの後、エラーが発生する可能性があります。
デューディスト2014年

回答:


293

完全な文字列を投稿してください。ただし、文字列にアポストロフィ( ')文字があると思います。(\ ')に置き換えれば、問題が修正されます。例えば、

//strings.xml
<string name="terms">
Hey Mr. Android, are you stuck?  Here, I\'ll clear a path for you.  
</string>

参照:

http://www.mrexcel.com/forum/showthread.php?t=195353

https://code.google.com/archive/p/replicaisland/issues/48


30
文字列データ内のすべてのアポストロフィをエスケープするというこのばかげた要件について、誰も話していないのはなぜですか?CDATAセクション内でも!
Phil Kulak、2012年

2
@PhilKulakへえ、それは例えばフランスではかなりクレイジーです。ftwを検索して置き換えます。
Warpzit 2014年

4
@PhilKulakでのAndroidのstrings.xmlは、あなたは次のように引用符を囲む他のタイプの中で文字列全体を囲むことができます<string name="good_example">"This'll work"</string> :リファレンスdeveloper.android.com/guide/topics/resources/...
situee

これは、多くの文字列があり、replace allを使用すると問題を引き起こす可能性があります。私の答えを見てください。
Dan Bray

26

解決

strings.xml内のアポストロフィは次のように書く必要があります

\'


私の場合、strings.xmlのこの文字列にエラーがあり、修正しました。

<item>Most arguments can be ended with three words, "I don\'t care".</item>

ここで、私のアプリがそのコードで適切にビルドされていることがわかります。

ここに画像の説明を入力してください

これが私のアプリの実際の文字列です。

ここに画像の説明を入力してください


1
ばかげて、私はXMLを使用していたので&apos;を使用していましたが、これもエラーです。
クリスウェスティン

12

アポストロフィの前に\を付ける必要があります。この\ 'のように、values.xmlではなく、strings.xmlを編集していることも確認します(エラーが表示された場合、Android Studioはこのファイルに移動します)。values.xmlを編集して再度コンパイルしようとすると、エラーが解消されないためです。これは最近私に起こっていました。


1
ははは!それはちょうど私にも起こりました。アポストロフィは、まさにその理由で、ポップアップ表示を続けました。私を狂わせていた。
DrMcCleod 2018年

10

https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

アポストロフィと引用符のエスケープ

文字列にアポストロフィまたは引用符がある場合は、それをエスケープするか、文字列全体を他のタイプの引用符で囲む必要があります。たとえば、次のような文字列は機能し、機能しません。

<string name="good_example">"This'll work"</string>
<string name="good_example_2">This\'ll also work</string>
<string name="bad_example">This doesn't work</string>
<string name="bad_example_2">XML encodings don&apos;t work</string>

6

(?<!\\)'エスケープされていないアポストロフィを検索するには、この正規表現を使用します。前にバックスラッシュがないアポストロフィを見つけます。


4

strings.xmlでヘブライ語(RTL言語)を使用しています。string.xmlでこの文字を手動で検索しました: 'エスケープ文字\をその前に追加した(現在は\のように見える)よりも、同じエラーが発生します!

char 'をもう一度検索し、char'を\ '(eng writing)に置き換えました。右から左に表示されるため、strings.xmlの' \のように見えます。

問題が解決しました。


@akauppi、このコメントはRTL言語の開発者向けです。画面に間違った順序で文字を表示することにより、RTLをうまく処理できないエディターに遭遇するためです。長い
ヘブライ語のセンテンスを

ああ、右から左。今ではすべてが理にかなっています。ありがとう。
akauppi 2014年

3
両側でエスケープすることにより、ヘブライ語のアポストロフィを解決しました:\ '\
radley

2

アポストロフィとxml文字列でサポートされていない他の文字の両方に相当するUnicodeを使用できる場合があります。アポストロフィに相当するものは "\ u0027"です。


1

1.エラーの場合:文字列内のエスケープされていないアポストロフィ

私が見つけたのは、AAPT2ツールがxmlの誤った行を指すことがあります。したがって、strings.xmlファイル全体を修正する必要があります

Android Studioで、問題のあるファイルを使用する場合:

編集->検索->置換

次に、最初のフィールド\ '(または\&、>、\ <、\ ")
に2番目のput'(または&、>、<、")
を書き込んでから、必要に応じてそれぞれを置き換えます。 )
次に、最初のフィールドに '(または&、>、<、 ")
を再度入力し、2番目の書き込みに\'
を入力して、必要に応じてそれぞれを置換します(または「すべてを置換」の場合は ')

2.他の問題のあるシンボルの
場合、間違った記号が見つからなくなるまで、次の半分の部分+再構築ごとにコメントを付けます。

たとえば、エスケープされた単語 "\ update"は予期せずそのようなエラーを落とします:)


1

'withをエスケープするだけの最善の答えは\'機能しますが、replace allを'to \'で使用すると1回しか機能しないため、ソリューションは好きではありません。二度目にあなたは残され\\'ます。

したがって、次を使用します\u0027

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.