【问题标题】:Error in strings.xml file in AndroidAndroid中的strings.xml文件出错
【发布时间】:2011-08-05 03:35:48
【问题描述】:

我在应用程序的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

【问题讨论】:

  • 错误是,因为字符串中的点太多。 `error: 前面没有`的撇号是一个虚拟消息,问题是点。我记得,超过三个点后你会得到错误。

标签: android xml escaping


【解决方案1】:

发布您的完整字符串。不过,我的猜测是您的字符串中有一个撇号 (') 字符。用 (\') 替换它,它将解决问题。例如,

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

【讨论】:

  • 为什么没有人谈论我们逃避字符串数据中的每一个撇号的这种愚蠢的要求?即使在 CDATA 部分中!
  • @PhilKulak heh,例如,法语很疯狂。我们将搜索并替换 ftw。
  • @PhilKulak 在 Android strings.xml 中,您可以将整个字符串括在其他类型的封闭引号中,例如 &lt;string name="good_example"&gt;"This'll work"&lt;/string&gt; 参考:developer.android.com/guide/topics/resources/…
  • 当您有很多字符串并使用全部替换时,这可能会导致问题。看我的回答。
  • 如果你在 gradle 文件中使用它作为 resValue,请使用“\\'”
【解决方案2】:

解决方案

strings.xml中的撇号应该写成

\'


示例

在我的情况下,我的 strings.xml 中的这个字符串有错误,我修复了它。

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

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

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

【讨论】:

  • 愚蠢的我,因为我使用的是 XML,所以我使用的是 ',这也是一个错误。
【解决方案3】:

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>

【讨论】:

  • XML 编码不适用于&amp;apos; 表单,但适用于&amp;#39; 表单。
【解决方案4】:

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

【讨论】:

  • 哈哈!这也发生在我身上。正是出于这个原因,撇号不断出现。快把我逼疯了。
【解决方案5】:

使用此正则表达式 (?&lt;!\\)' 搜索未转义的撇号。 它会找到一个前面没有反斜杠的撇号。

【讨论】:

    【解决方案6】:

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

    我再次搜索了 char ' 并将 char ' 替换为 \'(eng writing) ,因为它显示了从右到左的顺序,它看起来像 strings.xml 中的 '\ !!

    问题解决了。

    【讨论】:

    • @akauppi,此评论更多针对 RTL 语言开发人员,因为我们遇到无法很好地处理 RTL 的编辑器,通过在屏幕上以错误的顺序显示字符。在 xml 中输入长的希伯来语句子会变得混乱
    • 啊,从右到左。现在一切都说得通了。谢谢。
    • 我们通过在两边转义来解决希伯来语撇号:\'\
    【解决方案7】:

    您可以使用 unicode 等效的撇号和 xml 字符串中不支持的其他字符。撇号的等价物是“\u0027”。

    【讨论】:

      【解决方案8】:

      简单地用\' 转义' 的最佳答案是有效的,但我不喜欢这个解决方案,因为当使用用' 替换全部到\' 时,它只能工作一次。第二次你会留下\\'

      因此,使用:\u0027

      【讨论】:

        【解决方案9】:

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

        我发现 AAPT2 工具有时会指向 xml 中的错误行。 所以你应该更正整个 strings.xml 文件

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

        编辑->查找->替换

        然后在第一个字段中写入\'(或\&,>,\ 在第二个放 '(或 &,>, 然后根据需要替换每个。(或“replace all”以防万一)
        然后在第一个字段中再次输入 '(or &,>, 并在第二次写入 \'
        然后根据需要替换每个。(或“替换所有”以防万一)

        2。对于其他有问题的符号
        我用来评论下半部分+重建 直到我找不到错误的标志。

        例如转义词“\update”意外地丢弃了这样的错误:)

        【讨论】:

          【解决方案10】:
          1. 查找文件中的所有 '

          Ctrl + F [在搜索字段中输入撇号]'

          1. ' 应该写成“世界的”

          【讨论】:

            猜你喜欢
            • 2013-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多