Android中strings.xml文件中的错误


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
错误是,因为字符串中的点太多。错误:撇号前面没有冒号是一个虚假消息,问题在于点。我记得,超过三个点后,您会得到错误提示。
Dudeist 2014年

Answers:


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


30
为什么没有人在谈论这种愚蠢的要求,即我们必须在字符串数据中转义每个撇号?即使在CDATA部分中!
Phil Kulak'3

2
@PhilKulak嘿,例如,这对于法国人来说是非常疯狂的。我们将搜索并替换ftw。
Warpzit 2014年

4
@PhilKulak在Android中的strings.xml,您可以在其他类型的封装报价一样的封闭整串<string name="good_example">"This'll work"</string> :参考developer.android.com/guide/topics/resources/...
situee

当您有很多字符串并使用全部替换时,这可能会导致问题。看我的答案。
丹·布雷

26

strings.xml中的撇号应写为

\'


在我的情况下,strings.xml中的此字符串有错误,我已将其修复。

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

在这里,您可以看到我的应用程序使用该代码正确构建。

在此处输入图片说明

这是我的应用程序中的实际字符串。

在此处输入图片说明


1
愚蠢的我,因为我使用的是XML,所以我使用的是‘,这也是一个错误。
克里斯·威斯汀

12

您必须在撇号前加\。像这样\',还要检查您是否正在编辑strings.xml而不是values.xml(在显示错误时android studio会将您定向到该文件)。因为如果您编辑values.xml并尝试再次编译,该错误仍然存​​在。这是最近发生在我身上的事情。


1
哈哈!这也发生在我身上。正是由于这个原因,撇号不断弹出。让我发疯。
DrMcCleod '18

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

我在strings.xml中使用希伯来语(RTL语言)。我已经在string.xml中手动搜索了这个char:“比我在它的前面添加了转义char \(现在看起来像\'),仍然出现相同的错误!

我再次搜索了char',然后用\'(英语写作)替换了char',因为它显示了从右到左的样子,它看起来像是strings.xml中的'\!

问题解决了。


@akauppi,此注释更适合RTL语言开发人员,因为我们遇到的编辑器无法很好地处理RTL,因为它们在屏幕上以错误的顺序显示字符。在xml中输入长希伯来语sensense可能会变得混乱
Li3ro

啊,从右到左。这下全说通了。谢谢。
akauppi,2014年

3
我们通过在两侧进行转义来解决希伯来语撇号:\'\
radley 2014年

2

您也许可以使用等号的撇号和xml字符串中不支持的其他字符。Apostrophe的等效项是“ \ u0027”。


1

1.错误:字符串中未转义的撇号

我发现,AAPT2工具有时指向xml中的错误行。因此,您应该更正整个strings.xml文件

在Android Studio中,在问题文件中使用:

编辑->查找->替换

然后
在第二个位置'(或&,>,<,“)的第一个字段\'(或\&,>,\ <,\”)中写入,然后在
需要时替换每个字段。 ),
然后在第一个字段中再次放置'(或&,>,<,“)
,然后在第二个字段中写\',
然后根据需要替换每个。(或在替换为'的情况下“全部替换”)

2.对于其他有问题的符号,
我会在下半部分每隔+ rebuild注释一次,直到我找不到错误的符号为止。

例如,转义的单词“ \ update”意外删除了此类错误:)


1

简单地转义'with 的最佳答案,\'但我不喜欢该解决方案,因为当使用'to 替换全部时\',它只能使用一次。第二次您将离开\\'

因此,请使用:\u0027

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.