现在我有一系列unicode数字,我想在UILabel中显示它们,如果我对它们进行硬编码我可以显示它们,但是这太慢了,所以我想用变量替换它们,然后更改变量和得到相关的人物。 例如,现在我知道unicode是U + 095F,我想在UILabel中显示U + 095F到U + 096f的范围,我可以用硬编码这样做
NSString * str = [NSString stringWithFormat:@“\ u095f”];
但我想这样做
NSInteger十六进制= 0x095f;
[NSString stringWithFormat:@“\ u%ld”,(long)hex];
我可以自动更改十六进制,就像使用@"%ld", (long)hex
一样,所以任何人都知道如何实现它?
答案 0 :(得分:4)
您可以使用十六进制字节的缓冲区初始化字符串(只需提供其指针)。重点是,重要的是要提供要应用的字符编码。具体来说,您应该注意字节顺序。
以下是一个例子:
UInt32 hex = 0x095f;
NSString *unicodeString = [[NSString alloc] initWithBytes:&hex length:sizeof(hex) encoding:NSUTF32LittleEndianStringEncoding];
请注意,只要将它们用于16位unicode字符,使用%C
格式的解决方案就可以了。像emojis这样的32位unicode字符(例如:0x1f601,0x1f41a)将无法使用简单格式化。
答案 1 :(得分:0)
像这样:
unichar charCode = 0x095f;
NSString *s = [NSString stringWithFormat:@"%C",charCode];
NSLog(@"String = %@",s); //Output:String = य़
答案 2 :(得分:0)
你必须使用
[NSString stringWithFormat:@"%C", (unichar)hex];
或直接将unichar (unsigned short)
声明为
unichar uni = 0x095f;
[NSString stringWithFormat:@"%C", uni];
有用的资源可能是String Format Specifiers,其中%C
列为
16位Unicode字符(unichar),由NSLog()作为ASCII字符打印,如果不是ASCII字符,则以八进制格式\ ddd或Unicode十六进制格式\ udddd打印,其中d是数字。