使用NSString写入Unicode字符

9

我在一个新项目中使用符号字体Symbolicons代替图像。然而,似乎任何超过4个字符的代码都无法使用NSString设置。

例子:

self.saveDealButton.titleLabel.font = [UIFont fontWithName:@"SS Symbolicons" size:31.0f];
[self.saveDealButton setTitle:@"\u1F4E5" forState:UIControlStateNormal];

然而,以下内容将不起作用:

self.shareButton.titleLabel.font = [UIFont fontWithName:@"SS Symbolicons" size:31.0f];
[self.shareButton setTitle:@"\uF601" forState:UIControlStateNormal];

运行正常。如何让NSString识别额外的位?

2个回答

18

对于那些在补充多语言平面(Supplementary Multilingual Plane)中的字符,就像您的示例一样,在转义字符串中使用大写字母U,后跟八位十六进制代码。因此,应将其编写为\U0001F4E5


确定这在iOS上是允许的吗?据我所知,只有16位被实现了。 - iOS
@iOS:NSString(至少在API级别上)处理UTF-16代码单元。UTF-16可以使用一种称为代理项的系统表示大于U+FFFF的代码点。我在几个月前的博客文章中详细阐述了这一点:http://boredzo.org/blog/archives/2012-06-03/characters-in-nsstring - Peter Hosey
谢谢提供链接,那是我理解UTF-16可以扩展超过16位点的方法所缺失的部分。 - iOS

-1
在iOS中,Unicode字符属于16位表示形式\u,其中n在十六进制表示法中介于0000和ffff之间。
例如,在您的示例中,\uF601代表一个字符,您可以通过添加另一个序列\uF601\uF602等来添加另一个字符。
对我而言,您好像误解了转义语法?

这将是两个连续的字符,而不是提问者想要的单个字符(U+1F4E5)。 - Peter Hosey
没错,这就是我所说的“添加另一个序列”。我认为这是问题中“4个字符”所要求的。有趣的是,一个只有460个字符的符号字体却需要使用超过16位。 - iOS
我的理解是,“4个字符”应该是“4个十六进制数字”(请注意每个示例中\u后面的十六进制数字数量)。至于字体,重要的不是它有多少字符的字形,而是它使用这些字符的编码点。 - Peter Hosey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接