2012-10-27 59 views
3

我在新項目中使用符號字體Symbolicons而不是圖像。但是,似乎任何超過4個字符的代碼都不能使用NSString進行設置。使用NSString編寫Unicode字符

例子:

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識別額外的位?

回答

12

對於輔助多語言平面中的那些字符(如您的示例),在轉義字符串中使用大寫U,後跟八個十六進制代碼。所以應該寫成\U0001F4E5

+0

當然,這是允許的IOS? Afaik只實現了16位。 – iOS

+0

@iOS:NSString處理(至少在API級別)UTF-16代碼單元。使用稱爲代理的系統,UTF-16可以表示大於U + FFFF的代碼點。我在幾個月前的博客文章中詳細說明:http://boredzo.org/blog/archives/2012-06-03/characters-in-nsstring –

+0

感謝您的鏈接,這是我的理解,UTF -16有一種將點擴展到16位以上的方法。 – iOS

-1

在iOS中,unicode字符屬於16位表示法\ u,其中n在0000和ffff之間以十六進制表示法。

在您的例子\ uF601代表一個字符,你可以通過增加另一個序列\ uF601 \ uF602等

對我來說似乎是你誤解了這個轉義語法添加其他角色?

+0

這些將是兩個連續的字符,而不是提問者想要的單個字符(U + 1F4E5)。 –

+0

就是我剛纔提到的「添加另一個序列」。我認爲這是問題中「4個字符」所要求的。有趣的是,只有460個字符的符號字體必須使用多於16位。 – iOS

+0

我對「4個字符」的閱讀是「4位數」(注意在每個例子中'\ u'之後的十六進制數字的數量)。至於字體,它不是字形的字符數量;它是使用它們的代碼點。 –