iOS本地化:具有“\ uxxxx”格式的Unicode字符转义序列不起作用

我们在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”?

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

NSString文字使用与“普通”Cstring相同的转义序列,特别是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 - 😀 

另一方面,string文件使用\Unnnn表示一个UTF-16字符,对于字符> U + FFFF使用“UTF-16代理对”

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

(这是在“旧样式属性列表”中使用的转义,打印“NSDictionary”的描述时可以看到这一点)。

这(希望)回答你的问题

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

但是:正如@ gnasher729在他的回答中所指出的,根本不需要使用Unicode转义序列。 您可以简单地将Unicode字符本身插入到NSString文本和string文件中:

 NSString *string = @"Español - 😀"; "spanish-key" = "Español - 😀"; 

只需在Localization.string中以适当的Unicode编写string即可。

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