Errore nel file strings.xml in Android


114

Ho dichiarato una lunga stringa in string.xmlun'applicazione.

Dichiarato così

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

Ma questo dà il seguente errore:

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

1
l'errore è perché troppi punti nella stringa. `errore: apostrofo non preceduto da` è un messaggio fittizio, il problema è in punti. Come ricordo, dopo più di tre punti puoi ottenere un errore.
Dudeist

Risposte:


293

pubblica la tua stringa completa. Tuttavia, la mia ipotesi è che ci sia un carattere apostrofo (') nella tua stringa. sostituiscilo con (\ ') e risolverà il problema. per esempio,

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

Rif:

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

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


30
Perché nessuno parla di questo requisito idiota di sfuggire a ogni singolo apostrofo nei dati di stringa? Anche all'interno delle sezioni CDATA!
Phil Kulak

2
@PhilKulak eh, è ​​piuttosto folle con il francese per esempio. Cercheremo e sostituiremo ftw.
Warpzit

4
@PhilKulak In Android strings.xml, puoi racchiudere l'intera stringa in un altro tipo di virgolette come <string name="good_example">"This'll work"</string> Riferimento: developer.android.com/guide/topics/resources/…
situee

Ciò può causare un problema quando si hanno molte stringhe e si usa sostituisci tutto. Vedi la mia risposta.
Dan Bray

26

Soluzione

Gli apostrofi nel file strings.xml dovrebbero essere scritti come

\'


Esempio

Nel mio caso ho avuto un errore con questa stringa nel mio strings.xml e l'ho corretto.

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

Qui vedi la mia app costruita correttamente con quel codice.

inserisci qui la descrizione dell'immagine

Ecco la stringa effettiva nella mia app.

inserisci qui la descrizione dell'immagine


1
Sciocco io, dato che usavo XML, stavo usando & apos; e anche questo è un errore.
Chris Westin

12

Devi mettere \ prima di un apostrofo. In questo modo \ ', controlla anche di modificare strings.xml e non values.xml (Android Studio ti indirizza a questo file quando mostra l'errore). Perché se modifichi values.xml e provi a compilare di nuovo, l'errore persiste. Questo mi è successo di recente.


1
Haha! È successo anche a me. L'apostrofo continuava a riapparire proprio per questo motivo. Mi stava facendo impazzire.
DrMcCleod

10

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

Sfuggire a apostrofi e virgolette

Se nella stringa è presente un apostrofo o una virgoletta, è necessario eseguire l'escape o racchiudere l'intera stringa nell'altro tipo di virgolette. Ad esempio, ecco alcune punture che funzionano e non funzionano:

<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

Usa questa regex (?<!\\)'per cercare un apostrofo senza caratteri di escape. Trova un apostrofo che non è preceduto da una barra rovesciata.


4

Uso l'ebraico (linguaggio RTL) in strings.xml. Ho cercato manualmente il file string.xml per questo carattere: 'che ho aggiunto il carattere di escape \ davanti ad esso (ora sembra \') e ho ancora lo stesso errore!

Ho cercato di nuovo il carattere "e ho sostituito il carattere" con \ "(scrittura in inglese), poiché mostra da destra a sinistra sembra che" \ in strings.xml !!

Problema risolto.


@akauppi, Questo commento è più per gli sviluppatori di linguaggi RTL, poiché incontriamo editor che non sono in grado di gestire RTL molto bene, mostrando i caratteri in un ordine sbagliato sullo schermo. digitare lunghe
frasi ebraiche

Ah, da destra a sinistra. Adesso tutto ha un senso. Grazie.
akauppi

3
Abbiamo risolto gli apostrofi ebraici fuggendo da entrambi i lati: \ '\
radley

2

Potresti essere in grado di utilizzare l'equivalente Unicode sia dell'apostrofo che di altri caratteri non supportati nella stringa xml. L'equivalente di Apostrophe è "\ u0027".


1

1. per errore: apostrofo senza caratteri di escape nella stringa

quello che ho scoperto è che lo strumento AAPT2 punta a una riga sbagliata in xml, a volte. Quindi dovresti correggere l'intero file strings.xml

In Android Studio, nell'utilizzo di file problematici:

Modifica-> Trova-> sostituire

Quindi scrivi nel primo campo \ '(o \ &,>, \ <, \ ")
nel secondo put' (o &,>, <,")
quindi sostituiscili se necessario. (O "reptlace all" nel caso con " )
Quindi nel primo campo metti di nuovo '(o &,>, <, ")
e nel secondo scrivi \'
quindi sostituiscili se necessario. (O" sostituisci tutto "nel caso con ')

2. per altri simboli problematici
uso per commentare ogni metà successiva + ricostruire fino a quando non troverò il segno sbagliato.

Ad esempio, una parola di escape "\ update" fa cadere inaspettatamente tale errore :)


1

La migliore risposta di semplicemente sfuggire al 'con \'funziona ma non mi piace la soluzione perché quando si utilizza Sostituisci tutto con 'a \', funziona solo una volta. La seconda volta ti rimarrà \\'.

Pertanto, utilizzare: \u0027.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.