Ошибка в файле 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
Subrat
источник
1
ошибка, потому что слишком много точек в строке. `error: апостроф, которому не предшествует`, является фиктивным сообщением, проблема в точках. Насколько я помню, после более чем трех точек может появиться ошибка.
Dudeist

Ответы:

294

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

//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
источник
30
Почему никто не говорит об этом идиотском требовании избегать каждого апострофа в строковых данных? Даже в разделах CDATA!
Фил Кулак
2
@PhilKulak хех, с французским, например, безумие. Будем искать и заменять ftw.
Warpzit
4
@PhilKulak В Android strings.xml вы можете заключить всю строку в кавычки другого типа, например, <string name="good_example">"This'll work"</string> Ссылка: developer.android.com/guide/topics/resources/…
situee
Это может вызвать проблему, если у вас много строк и вы используете replace all. Смотрите мой ответ.
Дэн Брэй
26

Решение

Апострофы в strings.xml должны быть записаны как

\'


пример

В моем случае у меня была ошибка с этой строкой в ​​моем strings.xml, и я исправил ее.

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

Здесь вы видите, что мое приложение правильно строится с этим кодом.

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

Вот настоящая строка в моем приложении.

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

JGallardo
источник
1
Глупо, поскольку я использовал XML, я использовал & apos ;, и это тоже ошибка.
Крис Вестин,
12

Вы должны поставить \ перед апострофом. Подобно этому \ ', также убедитесь, что вы редактируете strings.xml, а не values.xml (студия Android направляет вас к этому файлу, когда показывает ошибку). Потому что, если вы отредактируете values.xml и попытаетесь снова скомпилировать, ошибка не исчезнет. Это происходило со мной недавно.

Walmac
источник
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 этот символ: ', затем добавил escape-символ \ перед ним (теперь он выглядит как \') и все еще получил ту же ошибку!

Я снова поискал char 'и заменил char' на \ '(английское письмо), так как он показывает справа налево, похоже, что' \ в strings.xml !!

Задача решена.

Li3ro
источник
@akauppi, этот комментарий больше для разработчиков языков RTL, так как мы сталкиваемся с редакторами, которые не могут очень хорошо обрабатывать RTL, показывая символы в неправильном порядке на экране. ввод длинных предложений на иврите в банке xml становится беспорядочным
Li3ro
Ах, справа налево. Все это имеет смысл сейчас. Спасибо.
akauppi
3
Мы решили апострофы на иврите, ускользнув с обеих сторон: \ '\
radley
2

Вы можете использовать эквивалент Unicode как апостроф, так и другие символы, которые не поддерживаются в строке xml. Эквивалент апострофа - "\ u0027".

Фотонная точка
источник
1

1. для ошибки: неэкранированный апостроф в строке

я обнаружил, что инструмент AAPT2 иногда указывает на неправильную строку в xml. Поэтому вам следует исправить весь файл strings.xml

В Android Studio в проблемном файле используйте:

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

Затем напишите в первом поле \ '(или \ &,>, \ <, \ "),
во втором поместите' (или &,>, <,"),
затем замените каждое, если необходимо. (Или "переставьте все" в случае с ' )
Затем в первом поле снова введите '(или &,>, <, "),
а во втором напишите \',
затем замените каждый, если необходимо. (Или" заменить все "в случае с ')

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

Например, экранированное слово "\ update" неожиданно вызывает ошибку :)

CodeToLife
источник
1

Лучший ответ - просто избежать с 'помощью \'работает, но мне не нравится решение, потому что при использовании replace all with 'to \'оно работает только один раз. Во второй раз останетесь с \\'.

Поэтому, используйте: \u0027.

Дэн Брэй
источник