NSString stringWithCString 不显示特殊字符?
NSString stringWithCString not showing special characters?
我正在使用
[NSString stringWithFormat:@"%C",(unichar)decimalValueX];
但我不得不调用它数千次而且它实在是太慢了。
作为替代方案,我尝试了这个:
sprintf (cString, "%C", (unichar)decimalValueX);
[NSString stringWithCString:cString encoding:NSUTF16StringEncoding];
但没有字符被正确转换。
如果我尝试使用 UTF8 而不是 16:
sprintf (cString, "%C", (unichar)decimalValueX);
[NSString stringWithCString:cString encoding:NSUTF8StringEncoding];
我得到字母数字,但没有得到外来字符或其他特殊字符。
谁能解释一下这是怎么回事?或者如何使 stringWithFormat 更快?
谢谢!
似乎 %C
格式不适用于 sprintf
和相关函数以及非 ASCII 字符。但是有一个更简单的方法:
stringWithCharacters:length:
直接从 unichar
数组(UTF-16 代码点)创建一个 NSString
。
对于单个 unichar
这只是
NSString *string = [NSString stringWithCharacters:&decimalValueX length:1];
示例:
unichar decimalValueX = 8364; // The Euro character
NSString *string = [NSString stringWithCharacters:&decimalValueX length:1];
NSLog(@"%@", string); // €
多个 UTF-16 代码点的示例:
unichar utf16[] = { 945, 946, 947 };
NSString *string3 = [NSString stringWithCharacters:utf16 length:3];
NSLog(@"%@", string3); // αβγ
对于 "basic multilingual plane" 之外的字符(即
字符 > U+FFFF) 你将不得不使用 2 个 UTF-16 代码点
每个字符(代理对)。
或者使用不同的 API 如
uint32_t utf32[] = { 128123, 128121 };
NSString *string4 = [[NSString alloc] initWithBytes:utf32 length:2*4 encoding:NSUTF32LittleEndianStringEncoding];
NSLog(@"%@", string4); //
我正在使用
[NSString stringWithFormat:@"%C",(unichar)decimalValueX];
但我不得不调用它数千次而且它实在是太慢了。
作为替代方案,我尝试了这个:
sprintf (cString, "%C", (unichar)decimalValueX);
[NSString stringWithCString:cString encoding:NSUTF16StringEncoding];
但没有字符被正确转换。
如果我尝试使用 UTF8 而不是 16:
sprintf (cString, "%C", (unichar)decimalValueX);
[NSString stringWithCString:cString encoding:NSUTF8StringEncoding];
我得到字母数字,但没有得到外来字符或其他特殊字符。
谁能解释一下这是怎么回事?或者如何使 stringWithFormat 更快?
谢谢!
似乎 %C
格式不适用于 sprintf
和相关函数以及非 ASCII 字符。但是有一个更简单的方法:
stringWithCharacters:length:
直接从 unichar
数组(UTF-16 代码点)创建一个 NSString
。
对于单个 unichar
这只是
NSString *string = [NSString stringWithCharacters:&decimalValueX length:1];
示例:
unichar decimalValueX = 8364; // The Euro character
NSString *string = [NSString stringWithCharacters:&decimalValueX length:1];
NSLog(@"%@", string); // €
多个 UTF-16 代码点的示例:
unichar utf16[] = { 945, 946, 947 };
NSString *string3 = [NSString stringWithCharacters:utf16 length:3];
NSLog(@"%@", string3); // αβγ
对于 "basic multilingual plane" 之外的字符(即 字符 > U+FFFF) 你将不得不使用 2 个 UTF-16 代码点 每个字符(代理对)。 或者使用不同的 API 如
uint32_t utf32[] = { 128123, 128121 };
NSString *string4 = [[NSString alloc] initWithBytes:utf32 length:2*4 encoding:NSUTF32LittleEndianStringEncoding];
NSLog(@"%@", string4); //