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
Subrat
fonte
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

Priyank
fonte
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

JGallardo
fonte
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.

Walmac
fonte
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>
situado
fonte
6

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

Elad Finish
fonte
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.

Li3ro
fonte
@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
3
Resolvemos os
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".

Photon Point
fonte
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 :)

CodeToLife
fonte
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.

Dan Bray
fonte