Erro no arquivo strings.xml no Android


114

Eu declarei uma longa seqüência de entrada string.xmlde um aplicativo.

Declarado assim

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

Mas isso dá o seguinte erro:

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

1
erro é, porque muitos pontos na string. `erro: apóstrofo não precedido por` é uma mensagem fictícia, o problema está em pontos. Pelo que me lembro, depois de mais de três pontos, você pode obter o erro.
Dudeist

Respostas:


293

poste sua string completa. Porém, meu palpite é que há um caractere apóstrofo (') em sua string. substitua-o por (\ ') e ele corrigirá o problema. por exemplo,

//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


30
Por que ninguém está falando sobre essa exigência idiota de que escapamos de cada apóstrofo em dados de string? Mesmo dentro das seções CDATA!
Phil Kulak

2
@PhilKulak heh, é muito louco com francês, por exemplo. Pesquisaremos e substituiremos ftw.
Warpzit

4
Strings.xml @PhilKulak No Android, você pode colocar toda a cadeia no outro tipo de encerrar cita como <string name="good_example">"This'll work"</string> referência: developer.android.com/guide/topics/resources/...
Située

Isso pode causar um problema quando você tem muitas strings e usa replace all. Veja minha resposta.
Dan Bray

26

Solução

Os apóstrofos em strings.xml devem ser escritos como

\'


Exemplo

No meu caso, tive um erro com essa string no meu strings.xml e o consertei .

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

Aqui você vê que meu aplicativo é construído corretamente com esse código.

insira a descrição da imagem aqui

Aqui está a string real em meu aplicativo.

insira a descrição da imagem aqui


1
Que boba, já que estava usando XML, estava usando & apos; e isso também é um erro.
Chris Westin,

12

Você deve colocar \ antes de um apóstrofo. Assim como este \ ', verifique também se você está editando strings.xml e não values.xml (o android studio direciona você para este arquivo quando mostra o erro). Porque se você editar values.xml e tentar compilar novamente, o erro persiste. Isso estava acontecendo comigo recentemente.


1
Haha! Isso também aconteceu comigo. O apóstrofo continuava aparecendo exatamente por esse motivo. Estava me deixando louco.
DrMcCleod

10

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

Apóstrofos e citações de escape

Se você tiver um apóstrofo ou uma aspas em sua string, você deve escapar ou colocar toda a string no outro tipo de aspas. Por exemplo, aqui estão algumas picadas que funcionam e não funcionam:

<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

Use esta regex (?<!\\)'para pesquisar um apóstrofo sem escape. Ele encontra um apóstrofo que não é precedido por uma barra invertida.


4

Eu uso hebraico (linguagem RTL) em strings.xml. Eu procurei manualmente o string.xml por este char: 'então eu adicionei o caractere de escape \ na frente dele (agora parece \') e ainda recebo o mesmo erro!

Procurei novamente pelo char 'e troquei o char' por \ '(escrita do eng), pois mostra uma direita para a esquerda parece que' \ no strings.xml !!

Problema resolvido.


@akauppi, Este comentário é mais para desenvolvedores de linguagens RTL, já que encontramos editores que não conseguem lidar com RTL muito bem, mostrando os caracteres em uma ordem errada na tela. digitar longas sentenças hebraicas em xml pode ficar confuso
Li3ro

Ah, da direita para a esquerda. Tudo faz sentido agora. Obrigado.
akauppi


2

Você pode ser capaz de usar unicode equivalente tanto apóstrofo quanto outros caracteres que não são suportados na string xml. O equivalente de apóstrofo é "\ u0027".


1

1. para erro: apóstrofo sem escape na string

o que descobri é que a ferramenta AAPT2 aponta para a linha errada no xml, às vezes. Portanto, você deve corrigir o arquivo strings.xml inteiro

No Android Studio, no uso de arquivo problemático:

Editar-> localizar-> substituir

Em seguida, escreva no primeiro campo \ '(ou \ &,>, \ <, \ ")
no segundo campo' (ou &,>, <,")
e substitua cada um, se necessário. (Ou "reposicione todos" no caso de ' )
Em seguida, no primeiro campo coloque novamente '(ou &,>, <, ")
e no segundo escreva \'
e substitua cada um, se necessário. (Ou" substitua todos "no caso de ')

2. para outros símbolos problemáticos,
eu uso para comentar cada metade da próxima parte + reconstruir até não encontrar o sinal errado.

Por exemplo, uma palavra de escape "\ update" descarta inesperadamente esse erro :)


1

A melhor resposta de simplesmente escapar de 'com \'funciona, mas não gosto da solução porque ao usar substituir tudo por 'para \', funciona apenas uma vez. Na segunda vez, você ficará com \\'.

Portanto, use: \u0027.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.