Ошибка в файле strings.xml в Android - PullRequest
97 голосов
/ 14 апреля 2011

Я объявил длинную строку в 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

Ответы [ 10 ]

249 голосов
/ 14 апреля 2011

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

//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

22 голосов
/ 03 ноября 2014

Решение

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

\'



Пример

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

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

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

enter image description here

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

enter image description here

11 голосов
/ 03 июля 2016

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

9 голосов
/ 18 марта 2015

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>
4 голосов
/ 03 апреля 2012

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

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

Проблема решена.

2 голосов
/ 28 декабря 2018

Используйте это регулярное выражение (?<!\\)' для поиска неиспользованного апострофа. Он находит апостроф, которому не предшествует обратная косая черта.

2 голосов
/ 29 февраля 2016

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

1 голос
/ 24 мая 2018

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

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

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

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

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

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

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

1 голос
/ 10 января 2018

Где в вашем апострофе используется строка?Я не могу найти это.пожалуйста, отправьте это.Если вам нужно использовать апостроф в вашей строке, просто используйте escape-последовательность "\" ", как это.

не = не в XMLпросто посмотрите последний элемент strings.xml.

enter image description here

Я думаю, что изображение выше прояснит ваши сомнения.

0 голосов
/ 23 октября 2018

Лучший ответ простое экранирование ' с \' работает, но мне не нравится решение, потому что при использовании заменить все на ' на \', оно работает только один раз. Во второй раз вы останетесь с \\'.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...