Fehler in der Datei strings.xml in Android

114

Ich habe eine lange Zeichenfolge in string.xmleiner Anwendung deklariert .

So erklärt

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

Dies führt jedoch zu folgendem Fehler:

error: Apostrophe not preceded by \ (in PLEASE READ THESE TERMS OF USE CAREFULLY
Subrat
quelle
1
Fehler ist, weil zu viele Punkte in der Zeichenfolge. `Fehler: Apostroph ohne vorangestelltes` ist eine Dummy-Nachricht, Problem ist in Punkten. Wie ich mich erinnere, kann nach mehr als drei Punkten ein Fehler auftreten.
Dudeist

Antworten:

293

poste deinen kompletten String. Ich vermute jedoch, dass Ihre Zeichenfolge ein Apostroph (') enthält. Ersetzen Sie es durch (\ ') und das Problem wird behoben. beispielsweise,

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

Ref:

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

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

Priyank
quelle
29
Warum spricht niemand über diese idiotische Forderung, dass wir jedem einzelnen Apostroph in Zeichenfolgendaten entkommen müssen? Auch innerhalb von CDATA-Abschnitten!
Phil Kulak
1
@PhilKulak heh, es ist ziemlich verrückt mit Französisch zum Beispiel. Wir werden ftw suchen und ersetzen.
Warpzit
4
@PhilKulak In Android strings.xml können Sie die gesamte Zeichenfolge in die andere Art von Anführungszeichen einschließen, z. B. <string name="good_example">"This'll work"</string> Referenz: developer.android.com/guide/topics/resources/…
situee
Dies kann zu Problemen führen, wenn Sie viele Zeichenfolgen haben und "Alle ersetzen" verwenden. Siehe meine Antwort.
Dan Bray
26

Lösung

Apostrophe in der Datei strings.xml sollten wie folgt geschrieben werden

\'


Beispiel

In meinem Fall hatte ich einen Fehler mit dieser Zeichenfolge in meiner Datei strings.xml und habe ihn behoben.

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

Hier sehen Sie, dass meine App mit diesem Code richtig erstellt wurde.

Geben Sie hier die Bildbeschreibung ein

Hier ist die aktuelle Zeichenfolge in meiner App.

Geben Sie hier die Bildbeschreibung ein

JGallardo
quelle
1
Blöd, da ich XML verwendet habe, habe ich & apos; verwendet, und das ist auch ein Fehler.
Chris Westin
12

Sie müssen \ vor ein Apostroph stellen. Überprüfen Sie auf diese Weise auch, ob Sie die Datei strings.xml und nicht die Datei values.xml bearbeiten (Android Studio leitet Sie zu dieser Datei weiter, wenn der Fehler angezeigt wird). Wenn Sie die Datei values.xml bearbeiten und erneut kompilieren, bleibt der Fehler bestehen. Das ist mir kürzlich passiert.

Walmac
quelle
1
Haha! Das ist mir auch passiert. Genau aus diesem Grund tauchte der Apostroph immer wieder auf. Hat mich verrückt gemacht.
DrMcCleod
10

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

Flucht vor Apostrophen und Zitaten

Wenn Ihre Zeichenfolge ein Apostroph oder ein Anführungszeichen enthält, müssen Sie es entweder maskieren oder die gesamte Zeichenfolge in die andere Art von einschließenden Anführungszeichen einschließen. Zum Beispiel sind hier einige Stiche, die funktionieren und nicht funktionieren:

<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>
Situee
quelle
6

Verwenden Sie diesen (?<!\\)'regulären Ausdruck für die Suche nach einem nicht entflohenen Apostroph. Es wird ein Apostroph gefunden, dem kein Backslash vorausgeht.

Elad Finish
quelle
4

Ich benutze Hebräisch (RTL-Sprache) in strings.xml. Ich habe die string.xml manuell nach diesem Zeichen durchsucht: 'als ich das Escape-Zeichen \ davor hinzugefügt habe (jetzt sieht es so aus \') und immer noch den gleichen Fehler erhalten!

Ich habe erneut nach dem Zeichen 'gesucht und das Zeichen' durch \ '(engl. Schrift) ersetzt, da es von rechts nach links angezeigt wird, sieht es so aus' \ in der Datei strings.xml !!

Problem gelöst.

Li3ro
quelle
@akauppi, Dieser Kommentar ist eher für die Entwickler von RTL-Sprachen gedacht, da wir auf Editoren stoßen, die mit RTL nicht sehr gut umgehen können, indem sie Zeichen in falscher Reihenfolge auf dem Bildschirm anzeigen. Das Eingeben von langen hebräischen Sentenses in XML kann unordentlich werden
Li3ro
Ah, von rechts nach links. Es macht jetzt alles Sinn. Vielen Dank.
Akauppi
3
Wir haben nach hebräischen Apostrophen
gesucht,
2

Möglicherweise können Sie Unicode-Äquivalente sowohl für Apostrophe als auch für andere Zeichen verwenden, die in XML-Zeichenfolgen nicht unterstützt werden. Das Äquivalent von Apostroph ist "\ u0027".

Photonenpunkt
quelle
1

1. für Fehler: nicht entflohener Apostroph in Zeichenfolge

Ich habe festgestellt, dass das AAPT2-Tool manchmal auf eine falsche Zeile in XML verweist. Sie sollten also die gesamte Datei strings.xml korrigieren

Verwenden Sie in Android Studio in der Problemdatei Folgendes:

Bearbeiten-> Suchen-> Ersetzen

Schreiben Sie dann in das erste Feld \ '(oder \ &,>, \ <, \ ")
in das zweite Feld ' (oder &,>, <,")
und ersetzen Sie jedes bei Bedarf (oder "alle neu platzieren", falls mit ' )
Geben Sie dann im ersten Feld erneut '(oder &,>, <, ") ein
und schreiben Sie im zweiten Feld \'
und ersetzen Sie jedes bei Bedarf. (Oder" Ersetzen Sie alle "im Fall von ')

2. Für andere problematische Symbole
benutze ich, um jeden nächsten halben Teil zu kommentieren + neu aufzubauen, bis ich nicht mehr das falsche Zeichen finde.

ZB ein Escape-Wort "\ update" löscht einen solchen Fehler unerwartet :)

CodeToLife
quelle
1

Die beste Antwort einfach die Flucht 'mit \'Werken aber ich weiß nicht , wie die Lösung , denn wenn alle mit der Verwendung ersetzen 'zu \', es funktioniert nur einmal. Das zweite Mal wirst du übrig bleiben \\'.

Verwenden Sie daher : \u0027.

Dan Bray
quelle