Помилка файлу strings.xml в Android


114

Я оголосив довгу рядок string.xmlпрограми.

Оголошено так

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

Але це дає таку помилку:

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

1
помилка в тому, що в рядку занадто багато крапок. `помилка: Апострофу, якому не передує`, є фіктивне повідомлення, проблема в крапках. Як я пам’ятаю, після більш ніж трьох крапок ви можете помилитися.
Дудеїст

Відповіді:


293

опублікувати повний рядок. Хоча, я здогадуюсь, у вашому рядку є символ апострофа ('). замініть його на (\ '), і це виправить проблему. наприклад,

//strings.xml
<string name="terms">
Hey Mr. Android, are you stuck?  Here, I\'ll clear a path for you.  
</string>

Довідка:

http://www.mrexcel.com/forum/showthread.php?t=195353

https://code.google.com/archive/p/replicaisland/isissue/48


30
Чому ніхто не говорить про цю ідіотичну вимогу, щоб ми уникали кожного апострофа в рядкових даних? Навіть у розділах CDATA!
Філ Кулак

2
@PhilKulak хе, це досить божевільно з французькою, наприклад. Ми будемо шукати і замінювати ftw.
Warpzit

4
@PhilKulak В Android strings.xml ви можете вкласти всю нитку в інший тип <string name="good_example">"This'll work"</string>
додаючих

Це може спричинити проблеми, коли у вас є багато рядків і використовуєте заміну всіх. Дивіться мою відповідь.
Ден Брей

26

Рішення

Апострофи в рядках.xml слід писати як

\'


Приклад

У моєму випадку у мого strings.xml у мене виникла помилка, і я її виправив.

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

Тут ви бачите, що моя програма належним чином створює цей код.

введіть тут опис зображення

Ось власне рядок у моєму додатку.

введіть тут опис зображення


1
Дурненько, оскільки я використовував XML, я використовував & quot ;, і це теж помилка.
Кріс Вестін

12

Ви повинні поставити \ перед апострофом. Як це \ ', також переконайтесь, що ви редагуєте strings.xml, а не values.xml (android studio спрямовує вас до цього файлу, коли показується помилка). Тому що якщо ви відредагуєте величини.xml та спробуйте знову зібрати, помилка зберігається Це сталося зі мною недавно.


1
Ха-ха! Це теж трапилось і зі мною. Саме тому апостроф вискакував. Загнав мене горіхом.
DrMcCleod

10

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

Уникнення апострофів і цитат

Якщо у вас є апостроф або цитата у вашому рядку, ви повинні або уникнути цього, або укласти всю рядку в інший тип додаючих лапок. Наприклад, ось кілька укусів, які роблять і не спрацьовують:

<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

Скористайтеся цим регулярним виразом (?<!\\)'для пошуку ненаголошеного апострофа. Він знаходить апостроф, якому не передує зворотна косої риски.


4

Я використовую іврит (мова RTL) у strings.xml. Я вручну шукав string.xml для цього char: ', ніж я додав значок втечі \ перед ним (зараз це виглядає як \') і все-таки отримав ту саму помилку!

Я знову шукав char 'і замінив char' на \ '(англ. Писати), оскільки він показує справа наліво, це виглядає так' \ у strings.xml !!

Проблема вирішена.


@akauppi, Цей коментар більше стосується розробників мов RTL, оскільки ми стикаємось з редакторами, які не можуть дуже добре впоратися з RTL, показуючи символи в неправильному порядку на екрані. введення довгих івритських сентенцій у xml може
стати

А, справа наліво. Це все має сенс зараз. Дякую.
акауппі

3
Ми вирішили для єврейських апострофів, втікаючи з обох сторін: \ '\
radley

2

Можливо, ви зможете використовувати еквівалент unicode як апострофа, так і інших символів, які не підтримуються у рядку xml. Еквівалент Апострофа - "\ u0027".


1

1. для помилки: несказаний апостроф у рядку

Я виявив, що інструмент AAPT2 вказує на неправильний рядок у xml. Тому вам слід виправити цілий файл strings.xml

У студії Android для використання проблемних файлів:

Правка-> знайти-> замінити

Потім запишіть у перше поле \ '(або \ &,>, \ <, \ ")
у друге місце' (або &,>, <,"),
а потім замініть кожне, якщо потрібно. )
Потім у першому полі знову поставте '(або &,>, <, "),
а у друге напишіть \',
а потім замініть кожне, якщо потрібно. (Або" замініть всі "у випадку з ')

2. Для інших проблемних символів
я коментую кожну наступну частину + перестроюйте, поки я не знайду неправильний знак.

Наприклад, уникне слово "\ update" несподівано скасовує таку помилку :)


1

Найкращою відповіддю просто Вислизаючий 'з \'роботою , але мені не подобається рішення , тому що при використанні замінити всі з 'на \', він працює тільки один раз. Вдруге ти залишишся \\'.

Тому, використовуйте: \u0027.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.