如何将 unicode 十六进制数字变量转换为 NSString 中的字符?
How to convert unicode hex number variable to character in NSString?
现在我有一系列 unicode 数字,我想在 UILabel 中显示它们,如果我对它们进行硬编码我可以显示它们,但是那太慢了,所以我想用一个变量替换它们,然后更改变量并获取相关字符。
例如,现在我知道 unicode 是 U+095F,我想在 UILabel 中显示 U+095F 到 U+096f 的范围,我可以使用
这样的硬编码来实现
NSString *str = [NSString stringWithFormat:@"\u095f"];
但我想这样做
NSInteger hex = 0x095f;
[NSString stringWithFormat:@"\u%ld", (long)hex];
我可以自动更改十六进制,就像使用 @"%ld", (long)hex
一样,所以有人知道如何实现吗?
像这样:
unichar charCode = 0x095f;
NSString *s = [NSString stringWithFormat:@"%C",charCode];
NSLog(@"String = %@",s); //Output:String = य़
你必须使用
[NSString stringWithFormat:@"%C", (unichar)hex];
或直接将unichar (unsigned short)
声明为
unichar uni = 0x095f;
[NSString stringWithFormat:@"%C", uni];
一个有用的资源可能是 String Format Specifiers,它将 %C
列为
16-bit Unicode character (unichar), printed by NSLog() as an ASCII character, or, if not an ASCII character, in the octal format \ddd or the Unicode hexadecimal format \udddd, where d is a digit.
您可以使用十六进制字节缓冲区来初始化字符串(您只需提供它的指针)。关键是,需要注意的重要一点是您提供了要应用的字符编码。具体来说,您应该注意字节顺序。
这是一个例子:
UInt32 hex = 0x095f;
NSString *unicodeString = [[NSString alloc] initWithBytes:&hex length:sizeof(hex) encoding:NSUTF32LittleEndianStringEncoding];
请注意,只要将它们用于 16 位 unicode 字符,使用 %C
格式等解决方案就可以了;像表情符号这样的 32 位 unicode 字符(例如:0x1f601、0x1f41a)将无法使用简单格式。
现在我有一系列 unicode 数字,我想在 UILabel 中显示它们,如果我对它们进行硬编码我可以显示它们,但是那太慢了,所以我想用一个变量替换它们,然后更改变量并获取相关字符。 例如,现在我知道 unicode 是 U+095F,我想在 UILabel 中显示 U+095F 到 U+096f 的范围,我可以使用
这样的硬编码来实现NSString *str = [NSString stringWithFormat:@"\u095f"];
但我想这样做
NSInteger hex = 0x095f;
[NSString stringWithFormat:@"\u%ld", (long)hex];
我可以自动更改十六进制,就像使用 @"%ld", (long)hex
一样,所以有人知道如何实现吗?
像这样:
unichar charCode = 0x095f;
NSString *s = [NSString stringWithFormat:@"%C",charCode];
NSLog(@"String = %@",s); //Output:String = य़
你必须使用
[NSString stringWithFormat:@"%C", (unichar)hex];
或直接将unichar (unsigned short)
声明为
unichar uni = 0x095f;
[NSString stringWithFormat:@"%C", uni];
一个有用的资源可能是 String Format Specifiers,它将 %C
列为
16-bit Unicode character (unichar), printed by NSLog() as an ASCII character, or, if not an ASCII character, in the octal format \ddd or the Unicode hexadecimal format \udddd, where d is a digit.
您可以使用十六进制字节缓冲区来初始化字符串(您只需提供它的指针)。关键是,需要注意的重要一点是您提供了要应用的字符编码。具体来说,您应该注意字节顺序。
这是一个例子:
UInt32 hex = 0x095f;
NSString *unicodeString = [[NSString alloc] initWithBytes:&hex length:sizeof(hex) encoding:NSUTF32LittleEndianStringEncoding];
请注意,只要将它们用于 16 位 unicode 字符,使用 %C
格式等解决方案就可以了;像表情符号这样的 32 位 unicode 字符(例如:0x1f601、0x1f41a)将无法使用简单格式。