我在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.comMessageFormat文档声明引号的规则有些混乱,然后只提供了一个只使用双引号的示例。从我阅读的文档来看,我的单引号似乎可以通过使用“”来解决:
<string name="unformatted_string">Here'''s a song I'''ve created just for you\! {0}</string>但是步骤会抛出一个错误,因为我有一个撇号--前面没有\。
我唯一的要求是在strings.xml中定义字符串(以支持本地化)。
发布于 2013-11-19 22:40:17
该文件是一个android资源文件,它要求每个撇号都使用前面的backslah进行转义。MessageFormat要求模式中的每一个撇号都加倍。所以你需要两个转义撇号:
<string name="unformatted_string">Here\'\'s a song I\'\'ve created just for you\! {0}</string>发布于 2013-11-19 22:38:09
在XML中,您可以使用实体'作为撇号。
但是,android资源在解析XML之后会做一些进一步的处理,并要求用反斜杠转义撇号--不管它们是作为实体表示还是直接放在标记中。这与XML无关。见这里的指南。真讨厌!XML已经为所有可能的字符提供了完整的编码,很遗憾android系统决定将这个不必要的层放在最上面。
最后,输出消息的格式要求撇号加倍,因为撇号是Java MessageFormat的转义字符。
发布于 2022-09-27 11:08:49
所有源(Google、Unicode)都建议对人类可读的文本使用单引号\u2019‘,并将ASCII撇号(\u0027 )的使用限制在程序语法上。
右单引号 =单逗号引号 这是撇号的首选字符
这完全避免了像你这样的问题。
https://stackoverflow.com/questions/20083538
复制相似问题