使用escape将NSString转换为unicode

use*_*234 1 unicode objective-c nsstring ios

NSString *string1 = @"\u03C0";
NSLog(@"string1: %@", string1);  // result of a Pi symbol

NSString *string2 = @"03C0";
NSString *string3 = [@"\\u" stringByAppendingString:string2];
NSLog(@"string3: %@", string3);  // result of \u03C0 but need it to be a Pi symbol as well
Run Code Online (Sandbox Code Playgroud)

我认为string3会给出与string1相同的结果.但事实并非如此.知道如何解决这个问题吗?

rma*_*ddy 6

当您输入字符串文字时\u9999,编译器会将其视为特殊字符文字.编译器会将该语法直接转换为结果字符.

string3正在运行时处理.该\u9999语法有在运行时没有任何特殊含义.

你可以这样做:

NSString *string2 = @"03C0";
NSScanner *scanner = [NSScanner scannerWithString:string2];
unsigned int code;
[scanner scanHexInt:&code];
NSString *string3 = [NSString stringWithFormat:@"%C", (unsigned short)code];
NSLog(@"string3: %@", string3);
Run Code Online (Sandbox Code Playgroud)

如果您知道代码,\u03C0那么您可以直接使用它:

NSString *string3 = [NSString stringWithFormat:@"%C", (unsigned short)0x03C0];
NSLog(@"string3: %@", string3);
Run Code Online (Sandbox Code Playgroud)

更好的是,直接输入:

NSString *string3 = @"?";
NSLog(@"string3: %@", string3);
Run Code Online (Sandbox Code Playgroud)