我在应用程序的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
答案 0 :(得分:246)
发布完整的字符串。虽然,我的猜测是你的字符串中有一个撇号(')字符。用(\')替换它,它将解决问题。例如,
//strings.xml
<string name="terms">
Hey Mr. Android, are you stuck? Here, I\'ll clear a path for you.
</string>
价:
答案 1 :(得分:21)
strings.xml 中的撇号应写为
\'
在我的情况下,我的 strings.xml 中的字符串出错了,我修复了它。
<item>Most arguments can be ended with three words, "I don\'t care".</item>
在这里,您可以看到我的应用使用该代码正确构建。
以下是我的应用中的实际字符串。
答案 2 :(得分:11)
你必须在撇号之前加\。像这样\#39; ,还要检查您是否正在编辑strings.xml而不是values.xml(android studio会在显示错误时将您指向此文件)。因为如果您编辑values.xml并尝试再次编译,则错误仍然存在。这最近发生在我身上。
答案 3 :(得分:9)
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't work</string>
答案 4 :(得分:4)
我在strings.xml中使用希伯来语(RTL语言)。 我已经在string.xml中手动搜索了这个char:' 比我添加它的转义字符\前面(现在它看起来像\')仍然有同样的错误!
我再次搜索了char',我用''(英文写作)替换了char',因为它显示了一个向左的权利,它看起来就像在strings.xml中的\!
问题解决了。
答案 5 :(得分:2)
您可以使用unicode等效的撇号和xml字符串中不支持的其他字符。撇号的等价物是“\ u0027”。
答案 6 :(得分:2)
使用此正则表达式(?<!\\)'
搜索未转义的撇号。
它找到一个没有反斜杠的撇号。
答案 7 :(得分:1)
你的撇号在哪里使用了字符串?我找不到。请发布。如果你需要在字符串中使用撇号,只需像这样使用转义序列“\”。
XML中的没有 = 没有,只看一下strings.xml的最后一项。
我认为上面的图片会清除你的怀疑。
答案 8 :(得分:1)
1。表示错误:字符串中未转义的撇号
我发现AAPT2工具有时会指向xml中的错误行。 所以你应该纠正整个strings.xml文件
在Android Studio中,在问题文件中使用:
编辑 - &GT; find-&GT;替换
然后写入第一个字段\'(或\&amp;,&gt;,\&lt;,\“)
在第二个放''或&amp;,&gt;,&lt;,“)
然后在需要的时候更换每个。(或者在'的情况下“reptlace all”)
然后在第一个字段再次输入'(或&amp;,&gt;,&lt;,“)
并在第二次写'\\
然后在需要时替换每个。(或者用')“替换所有”
<强> 2。其他有问题的符号
我用来评论每个下半部分+重建
直到我找不到错误的标志。
E.g。一个转义的单词“\ update”意外地丢弃了这样的错误:)
答案 9 :(得分:0)
用'
简单地转义\'
的最佳答案是可行的,但是我不喜欢该解决方案,因为在将'
替换为\'
时,它只能工作一旦。第二次您将得到\\'
的帮助。
因此,请使用:\u0027
。