Error en el archivo strings.xml en Android

114

He declarado una cadena larga en string.xmluna aplicación.

Declarado así

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

Pero esto da el siguiente error:

error: Apostrophe not preceded by \ (in PLEASE READ THESE TERMS OF USE CAREFULLY
Subrat
fuente
1
El error es porque hay demasiados puntos en la cadena. `error: El apóstrofe no precedido por` es un mensaje ficticio, el problema está en puntos. Según recuerdo, después de más de tres puntos, puede aparecer un error.
Dudeist

Respuestas:

293

publique su cadena completa. Sin embargo, creo que hay un carácter de apóstrofe (') en su cadena. reemplácelo con (\ ') y solucionará el problema. por ejemplo,

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

Árbitro:

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

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

Priyank
fuente
30
¿Por qué nadie habla de este estúpido requisito de escapar de cada apóstrofe en los datos de cadena? ¡Incluso dentro de las secciones CDATA!
Phil Kulak
2
@PhilKulak je, es una locura con el francés, por ejemplo. Buscaremos y reemplazaremos ftw.
Warpzit
4
@PhilKulak En Android strings.xml, puede incluir toda la cadena en el otro tipo de citas <string name="good_example">"This'll work"</string>
adjuntas
Esto puede causar un problema cuando tiene muchas cadenas y usa reemplazar todas. Mira mi respuesta.
Dan Bray
26

Solución

Los apóstrofos en strings.xml deben escribirse como

\'


Ejemplo

En mi caso, tuve un error con esta cadena en mi strings.xml y lo arreglé.

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

Aquí puede ver que mi aplicación se compila correctamente con ese código.

ingrese la descripción de la imagen aquí

Aquí está la cadena real en mi aplicación.

ingrese la descripción de la imagen aquí

JGallardo
fuente
1
Tonto de mí, ya que estaba usando XML, estaba usando & apos ;, y eso también es un error.
Chris Westin
12

Tienes que poner \ antes de un apóstrofe. Así \ ', también verifique que está editando strings.xml y no values.xml (Android Studio lo dirige a este archivo cuando muestra el error). Porque si editas values.xml e intentas compilar nuevamente, el error persiste. Esto me estaba pasando recientemente.

Walmac
fuente
1
¡Jaja! Eso también me pasó a mí. El apóstrofe seguía apareciendo exactamente por esa razón. Me estaba volviendo loco.
DrMcCleod
10

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

Escapar de apóstrofes y citas

Si tiene un apóstrofo o una cita en su cadena, debe escapar de ella o encerrar toda la cadena en el otro tipo de comillas adjuntas. Por ejemplo, aquí hay algunas picaduras que funcionan y no funcionan:

<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
fuente
6

Utilice esta expresión regular (?<!\\)'para buscar un apóstrofe sin escape. Encuentra un apóstrofo que no está precedido por una barra invertida.

Acabado Elad
fuente
4

Utilizo hebreo (lenguaje RTL) en strings.xml. He buscado manualmente el string.xml para este carácter: 'luego agregué el carácter de escape \ enfrente de él (ahora parece \') y todavía tengo el mismo error.

Busqué nuevamente el char 'y reemplacé el char' con \ '(escritura en inglés), ya que muestra una derecha a izquierda y se ve así' \ en strings.xml !!

Problema resuelto.

Li3ro
fuente
@akauppi, Este comentario es más para los desarrolladores de lenguajes RTL, ya que nos encontramos con editores que no pueden manejar RTL muy bien, mostrando caracteres en un orden incorrecto en la pantalla. escribir
frases
Ah, de derecha a izquierda. Todo tiene sentido ahora. Gracias.
akauppi
3
Resolvimos los apóstrofos hebreos escapando por ambos lados: \ '\
radley
2

Es posible que pueda usar un apóstrofo equivalente a Unicode y otros caracteres que no son compatibles con la cadena xml. El equivalente de Apostrophe es "\ u0027".

Punto de fotón
fuente
1

1. por error: apóstrofo sin escape en cadena

lo que encontré es que la herramienta AAPT2 apunta a una fila incorrecta en xml, a veces. Por lo tanto, debe corregir el archivo strings.xml completo

En Android Studio, en el uso de archivos problemáticos:

Editar-> buscar-> reemplazar

Luego escriba en el primer campo \ '(o \ &,>, \ <, \ ")
en el segundo puesto' (o &,>, <,") y
luego reemplace cada uno si es necesario. (O "reptlace all" en caso de que tenga ' )
Luego, en el primer campo,
escriba nuevamente '(o &,>, <, ") y en el segundo escriba \',
luego reemplace cada uno si es necesario. (O" reemplace todo "en el caso con ')

2. para otros símbolos problemáticos
, utilizo para comentar cada mitad siguiente + reconstruir hasta que no encuentre el signo incorrecto.

Por ejemplo, una palabra de escape "\ update" arroja inesperadamente dicho error :)

CodeToLife
fuente
1

La mejor respuesta de simplemente escapar de 'con \'funciona, pero no me gusta la solución porque cuando se usa reemplazar todos con 'to \', solo funciona una vez. La segunda vez te quedarás \\'.

Por lo tanto, utilice: \u0027.

Dan Bray
fuente