iOS本地化:Unicode字符转义序列,其形式为' \ uxxxx'不起作用

时间:2014-05-04 05:18:47

标签: ios unicode-string localizable.strings

我们在Localization.string文件中有键值对。

"spanish-key" = "Espa\u00f1ol";

当我们获取并分配给标签时,应用程序会将其显示为“Espau00f1ol”。

不起作用。

self.label1.text= NSLocalizedString(@"spanish-key", nil);

它以所需格式显示。

self.label1.text= @"Espa\u00f1ol";

当我们使用

时,这可能是什么问题
NSLocalizedString(@"spanish-key", nil)?

如果我们设置\ U而不是\ u,那么它可以正常工作。

 "spanish-key" = "Espa\U00f1ol";

何时使用“\ Uxxxx”和“\ uxxxx”?

2 个答案:

答案 0 :(得分:30)

NSString文字和字符串文件使用不同的转义规则

NSString文字使用与" normal"相同的转义序列。特别是C字符串 "通用角色名称"在C99标准中定义:

\unnnn      - the character whose four-digit short identifier is nnnn
\Unnnnnnnn  - the character whose eight-digit short identifier is nnnnnnnn

示例:

NSString *string = @"Espa\u00F1ol - \U0001F600"; // Español - 

另一方面,字符串文件使用\Unnnn来表示UTF-16字符, 和" UTF-16代理对"对于字符> U + FFFF:

"spanish-key" = "Espa\U00f1ol - \Ud83d\Ude00";

(这是"旧式属性列表"中使用的转义,您可以在打印时看到 `NSDictionary的描述。)

这(希望)回答你的问题

  

何时使用" \ Uxxxx"和" \ uxxxx"?

但是: 正如@ gnasher729在他的回答中所指出的那样,没有必要使用Unicode 完全逃脱序列。您只需插入Unicode字符本身, 在NSString文字和字符串文件中都有:

NSString *string = @"Español - ";

"spanish-key" = "Español - ";

答案 1 :(得分:2)

只需在Localization.string中以正确的Unicode编写字符串即可。

"spanish-key" = "Español";