2012-02-21 11 views
16

W < string-tablicy name = „wersjach”> Mam tę bestię wpisu (gotowany w dół do rozsądnego minimum, aby odtworzyć efekt):Ucieczka wiele „%” znaków w Androidzie

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

który generuje następujące błędy:

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 

Dodanie sformatowanego = "fałsz" niczego nie zmienia.

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

powoduje wyświetlenie tych samych komunikatów o błędach. WTH?

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

wszystko działałoby dobrze. Uciekanie z \% jest po prostu ignorowane powodując ten sam błąd. %% nie powoduje błędu, ale otrzymuję %%.

+0

http://stackoverflow.com/questions/4414389/android-xml-percent-symbol/4417333#4417333, większość tego, co mówisz, nie zadziała, ale zobacz ostatnią opcję. –

+0

Niż za odpowiedź. Niestety nie mam do czynienia z łańcuchem, który mógłby w ogóle umożliwić zamianę, chyba że istnieje sposób na dokonywanie podstawień w tablicach. W moim pliku arrays.xml znajduje się tablica znaków z elementami. Te ładuję za pomocą getResources(). GetStringArray (R.array.versions); – Giszmo

+0

ouch, getStringArray używa formatyzatora, ale nie pozwala przekazywać argumentów formatujących. Obawiam się, że będziesz musiał odtworzyć tablicę po jej załadowaniu, podstawianiu w% lub poprawieniu ciągów podczas ich używania. –

Odpowiedz

21

kodowania każdej postaci znaków Unicode w xml działa dla mnie:

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

OK, myślę, że to powinna być droga. Nadal chciałbym zrozumieć, dlaczego zarówno % i \ u0025 są% ale wersja 1 powoduje, że mam uruchomić błąd? – Giszmo

+3

Straciłem dobre 20 minut na to, więc mam nadzieję, że można zaoszczędzić czas dla kogoś innego. Mając do sformatowania String, musiałem użyć np. Score: % .2f %%. Dwukolorowy znak dołączony do formatu. Żadne z powyższych nie działało w tym przypadku. – donnadulcinea

+0

To zadziałało dla mnie, dzięki. – Kedarnath

1

Korzystanie CDATA może pracować ..

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

Nie działa z 'CDATA', chyba że używasz' %% '. – mike47

16

% jest znakiem zarezerwowanym w XML jak <, >, itd. Użyj %% dla każdego używanego % zasobu ciągów.

+3

Trochę spóźniłeś się z odpowiedzią, ale mimo to dziękuję: D Mogę przetestować Twoje rozwiązanie, jeśli wkrótce przejdę przez rozwój Androida, ale biorąc pod uwagę, że wypróbowałem '%' Chociaż udało mi się zrobić wystarczająco dużo ucieczki w tym czasie. '\ %%' jest zdecydowanie ładniejszy niż '\ u0025' ... cóż ... może nie" zdecydowanie ". :) – Giszmo

+0

'%%' był jedynym, który działa dla mnie. To jest moja ostatnia struna '(% 1 $ s %% commission)', która tłumaczy, na przykład, w '(prowizja 2,56%)' – Laranjeiro

+3

% z całą pewnością nie jest zarezerwowaną postacią w XML; to ograniczenie treści dotyczy plików zasobów Androida. – Cumbayah