Unicode 分配在 NSString 中失败



以下两个 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' 

如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];

字符串文本中Unnnnnnnn结构的处理是在编译时完成的。不能在运行时生成构造并对其进行解释。事情不是这样运作的。

你可以做:

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

最新更新