2012-02-21 16 views
16

In < stringa-array name = "versioni"> Ho questa bestia di una voce (ridotte a un minimo ragionevole di riprodurre l'effetto):fuga più caratteri “%” in Android

<item>100% foo 40%bar</item> 

che produce questi errori:

Multiple annotations found at this line: 
- error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute? 
- error: Found tag </item> where </string-array> is expected 

Aggiunta formattato = "false" non cambia nulla.

<item>100&#37; foo 40&#37;bar</item> 

restituiscono gli stessi messaggi di errore. WTH?

<item>100% foo 40bar</item> 
<item>100 foo 40%bar</item> 
<item>100% foo 40%</item> 

funzionerebbero tutti bene. Escaping con \% viene semplicemente ignorato con lo stesso errore. %% non genera un errore ma ottengo %%.

+0

http://stackoverflow.com/questions/4414389/android-xml-percent-symbol/4417333#4417333, la maggior parte di ciò che dici non funziona, ma vedi l'ultima opzione. –

+0

Grazie per la risposta. Sfortunatamente non ho a che fare con una stringa che potrebbe consentire la sostituzione a meno che non ci sia un modo per fare sostituzioni negli array. Nel mio array.xml c'è un array di stringhe con elementi. Questi li carico tramite getResources(). GetStringArray (R.array.versions); – Giszmo

+0

ouch, getStringArray utilizza il formattatore e tuttavia non consente di passare argomenti di formato. Temo che dovrai ricreare l'array dopo averlo caricato, sostituendo il%, oppure correggere le stringhe mentre le usi. –

risposta

21

Codifica ciascuno come un carattere Unicode in xml funziona per me:

<string name="test">100\u0025 foo 40\u0025bar</string> 
+1

Ok, immagino che questa dovrebbe essere la strada da percorrere. Ancora mi piacerebbe capire perché sia ​​% sia \ u0025 sono% ma la versione 1 mi fa incorrere nell'errore ?? – Giszmo

+3

Ho perso un buon 20 minuti su questo, quindi spero possa risparmiare tempo per qualcun altro. Avendo una stringa da formattare, ho dovuto usare per esempio, Punteggio: % .2f %%. Due% di carattere, allegato al formato. Nessuno dei precedenti ha funzionato in questo caso. – donnadulcinea

+0

Questo ha funzionato per me, grazie. – Kedarnath

1

Utilizzando CDATA può funzionare ..

<item><![CDATA[100% foo 40%]]></item> 
+0

Non funziona con 'CDATA' a meno che non si usi' %% '. – mike47

16

Il % è un carattere riservato in XML come <, >, ecc. Utilizzare %% per ogni % utilizzato nella risorsa stringa.

+3

Sei in ritardo con la tua risposta, ma grazie comunque: D Potrei testare la tua soluzione se arrivo presto allo sviluppo di Android ma dato che ho provato a '%' Ho pensato di fartene un po 'indietro. "\ %%" è decisamente più bello di "\ u0025' ... beh ... forse non" decisamente ". :) – Giszmo

+0

'%%' è stato l'unico che funziona per me. Questa è la mia stringa finale '(% 1 $ s %% commissione)' che si traduce, ad esempio, in '(2,56% di commissione)' – Laranjeiro

+3

% in gran parte non è un carattere riservato in XML; questa restrizione del contenuto è specifica per i file di risorse Android. – Cumbayah