在NSString中unicode赋值失败?

时间:2016-02-08 22:20:03

标签: objective-c unicode

以下两个unichar分配都失败了吗?

unsigned int c = 0x0001d122;
[NSString stringWithFormat:@"\U%@", [NSString stringWithFormat:@"%08X", c]];
[NSString stringWithFormat:@"\U%08X", c];

我正在尝试以编程方式执行此操作(添加“\ U”会使事情变得困难,如上所示):

nssSymbol = @"\U0001d122"; \\this works... but need to be able to vary 'c' 

2 个答案:

答案 0 :(得分:2)

如Ken Thomases所示,您可以从字节创建字符串,但是您必须知道机器的字节序或使用字节序转换例程。

例如,在小端的英特尔Mac上,您可以使用:

uint32_t c = 0x0001d122;
NSString* s = [[NSString alloc] initWithBytes:&c
                                       length:sizeof(c)
                                     encoding:NSUTF32LittleEndianStringEncoding];

如果您不希望编码系统字节序的知识,可以使用转换例程。例如:

uint32_t c = EndianU32_NtoB(0x0001d122); // convert from native endianness to big endian
NSString* s = [[NSString alloc] initWithBytes:&c
                                       length:sizeof(c)
                                     encoding:NSUTF32BigEndianStringEncoding];

HTH

答案 1 :(得分:1)

在字符串文字中处理\Unnnnnnnn构造是在编译时完成的。您无法在运行时构建构造并对其进行解释。事情并非如此。

你可以这样做:

uint32_t c = 0x0001d122;
NSString* s = [[NSString alloc] initWithBytes:&c length:sizeof(c) encoding:NSUTF32LittleEndianStringEncoding];