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

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


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í


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.


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>

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.


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.


@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".


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 :)


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.