3

我在我的 strings.xml 文件中定义了一个字符串:

<string name="unformatted_string">Here\'s a song I\'ve created just for you\! {0}</string>

然后我获取该字符串并使用 MessageFormat.format,将 {0} 替换为 URL:

String str = MessageFormat.format(getString(R.string.unformatted_string), url);

当我打印 str 时,我看到:

Heres a song Ive created just for you http://www.google.com

MessageFormat 文档指出引号的规则有些混乱,然后继续提供仅使用双引号的单个示例。从我对文档的阅读来看,我的单引号问题似乎可以通过使用'''来解决:

<string name="unformatted_string">Here'''s a song I'''ve created just for you\! {0}</string>

但是 Android 资源打包步骤会引发错误,因为我有一个撇号,前面没有\.

我唯一的要求是在 strings.xml 中定义字符串(以支持本地化)。

4

2 回答 2

4

该文件是一个 android 资源文件,它要求每个撇号都使用前面的反斜杠进行转义。MessageFormat 要求模式中的每个撇号都加倍。所以你需要两个转义的撇号:

<string name="unformatted_string">Here\'\'s a song I\'\'ve created just for you\! {0}</string>
于 2013-11-19T22:40:17.567 回答
0

在 XML 中,您可以使用实体 &#39;作为撇号。

但是,android 资源在解析 XML 后会进行一些进一步的处理,并要求用反斜杠转义撇号 - 无论它们是表示为实体还是直接放置在标记中。这与 XML 无关。请参阅此处的指南。呸!XML 已经为所有可能的字符提供了完整的编码,遗憾的是 android 系统决定将这个不必要的层放在上面。

最后,输出消息的格式要求将撇号加倍,因为撇号是Java MessageFormat的转义字符。

于 2013-11-19T22:38:09.960 回答