Erreur dans le fichier strings.xml sous Android


114

J'ai déclaré une longue chaîne dans string.xmlune application.

Déclaré comme ça

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

Mais cela donne l'erreur suivante:

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

1
l'erreur est, car trop de points dans la chaîne. `erreur: Apostrophe non précédée de` est un message factice, le problème est en points. Si je me souviens bien, après plus de trois points, vous pouvez obtenir une erreur.
Dudeist

Réponses:


293

postez votre chaîne complète. Cependant, je suppose qu'il y a un caractère apostrophe (') dans votre chaîne. remplacez-le par (\ ') et cela résoudra le problème. par exemple,

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

Réf:

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

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


30
Pourquoi personne ne parle de cette exigence idiote selon laquelle nous échappons à chaque apostrophe dans les données de chaîne? Même dans les sections CDATA!
Phil Kulak

2
@PhilKulak heh, c'est assez fou avec le français par exemple. Nous rechercherons et remplacerons ftw.
Warpzit

4
@PhilKulak Dans Android strings.xml, vous pouvez inclure la chaîne entière dans l'autre type de guillemets englobants comme <string name="good_example">"This'll work"</string> Reference: developer.android.com/guide/topics/resources/…
situee

Cela peut poser un problème lorsque vous avez beaucoup de chaînes et que vous utilisez tout remplacer. Voyez ma réponse.
Dan Bray

26

Solution

Les apostrophes dans le fichier strings.xml doivent être écrites comme

\'


Exemple

Dans mon cas, j'ai eu une erreur avec cette chaîne dans mon strings.xml et je l'ai corrigée.

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

Ici, vous voyez que mon application se construit correctement avec ce code.

entrez la description de l'image ici

Voici la chaîne réelle dans mon application.

entrez la description de l'image ici


1
C'est idiot, puisque j'utilisais XML, j'utilisais & apos ;, et c'est aussi une erreur.
Chris Westin

12

Vous devez mettre \ avant une apostrophe. Comme ceci \ ', vérifiez également que vous modifiez strings.xml et non values.xml (android studio vous dirige vers ce fichier lorsque l'erreur s'affiche). Parce que si vous modifiez values.xml et essayez de compiler à nouveau, l'erreur persiste. Cela m'est arrivé récemment.


1
Haha! Cela m'est arrivé aussi. L'apostrophe a continué à réapparaître pour exactement cette raison. Cela me rendait fou.
DrMcCleod

10

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

Échapper aux apostrophes et aux citations

Si vous avez une apostrophe ou un guillemet dans votre chaîne, vous devez l'échapper ou placer la chaîne entière dans l'autre type de guillemets. Par exemple, voici quelques piqûres qui fonctionnent et qui ne fonctionnent pas:

<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

Utilisez cette expression régulière (?<!\\)'pour rechercher une apostrophe sans échappement. Il trouve une apostrophe qui n'est pas précédée d'une barre oblique inverse.


4

J'utilise l'hébreu (langage RTL) dans strings.xml. J'ai recherché manuellement le string.xml pour ce caractère: 'alors j'ai ajouté le caractère d'échappement \ en face de celui-ci (maintenant il ressemble à \') et j'ai toujours la même erreur!

J'ai cherché à nouveau le caractère 'et j'ai remplacé le caractère' par \ '(écriture eng), car il montre un droit à gauche, il ressemble à cela' \ dans le strings.xml !!

Problème résolu.


@akauppi, Ce commentaire s'adresse davantage aux développeurs de langages RTL, puisque nous rencontrons des éditeurs qui ne peuvent pas très bien gérer RTL, en affichant les caractères dans un mauvais ordre à l'écran. taper de longues phrases hébraïques en xml peut
devenir compliqué

Ah, de droite à gauche. Tout s'explique maintenant. Merci.
akauppi

3
Nous avons résolu les apostrophes hébraïques en nous échappant des deux côtés: \ '\
radley

2

Vous pourrez peut-être utiliser l'équivalent Unicode à la fois de l'apostrophe et d'autres caractères qui ne sont pas pris en charge dans la chaîne xml. L'équivalent de l'apostrophe est "\ u0027".


1

1. pour erreur: apostrophe non échappée dans la chaîne

ce que j'ai trouvé, c'est que l'outil AAPT2 pointe parfois vers une mauvaise ligne en xml. Vous devez donc corriger tout le fichier strings.xml

Dans Android Studio, dans les fichiers problématiques, utilisez:

Modifier-> rechercher-> remplacer

Ensuite, écrivez dans le premier champ \ '(ou \ &,>, \ <, \ ")
dans le deuxième put' (ou &,>, <,")
puis remplacez chacun si nécessaire. (Ou "reptlace all" au cas où ' )
Ensuite, dans le premier champ, mettez à nouveau '(ou &,>, <, ")
et dans la deuxième écriture \'
puis remplacez chacun si nécessaire. (Ou" remplacez tout "au cas où avec ')

2. pour les autres symboles problématiques
que j'utilise pour commenter chaque partie suivante + reconstruire jusqu'à ce que je ne trouve pas le mauvais signe.

Par exemple, un mot échappé "\ update" supprime de manière inattendue une telle erreur :)


1

La meilleure réponse qui consiste simplement à échapper à 'avec \'fonctionne mais je n'aime pas la solution car lorsque vous utilisez remplacer tout par 'à \', cela ne fonctionne qu'une seule fois. La deuxième fois, il vous restera \\'.

, Utilisez donc: \u0027.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.