首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MessageFormat -发出转义字符

MessageFormat -发出转义字符
EN

Stack Overflow用户
提问于 2013-11-19 22:34:23
回答 3查看 1.3K关注 0票数 3

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

代码语言:javascript
复制
<string name="unformatted_string">Here\'s a song I\'ve created just for you\! {0}</string>

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

代码语言:javascript
复制
String str = MessageFormat.format(getString(R.string.unformatted_string), url);

当我打印str时,我看到这个:

代码语言:javascript
复制
Heres a song Ive created just for you http://www.google.com

MessageFormat文档声明引号的规则有些混乱,然后只提供了一个只使用双引号的示例。从我阅读的文档来看,我的单引号似乎可以通过使用“”来解决:

代码语言:javascript
复制
<string name="unformatted_string">Here'''s a song I'''ve created just for you\! {0}</string>

但是步骤会抛出一个错误,因为我有一个撇号--前面没有\

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-19 22:40:17

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

代码语言:javascript
复制
<string name="unformatted_string">Here\'\'s a song I\'\'ve created just for you\! {0}</string>
票数 4
EN

Stack Overflow用户

发布于 2013-11-19 22:38:09

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2022-09-27 11:08:49

所有源(Google、Unicode)都建议对人类可读的文本使用单引号\u2019‘,并将ASCII撇号(\u0027 )的使用限制在程序语法上。

右单引号 =单逗号引号 这是撇号的首选字符

这完全避免了像你这样的问题。

标记

https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20083538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档