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
我认为string3会给出与string1相同的结果。但事实并非如此。知道如何解决这个问题吗?
答案 0 :(得分: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);
如果你知道代码是\u03C0
,那么你可以直接使用它:
NSString *string3 = [NSString stringWithFormat:@"%C", (unsigned short)0x03C0];
NSLog(@"string3: %@", string3);
更好的是,直接输入:
NSString *string3 = @"π";
NSLog(@"string3: %@", string3);
答案 1 :(得分:2)
答案在于你的问题。
你说这是UNICODE Character \ u03C0,而不是UNICODE字符串。
因此,当您使用stringByAppendingString:
时,它会将string
返回给string3
,而不是字符。
答案 2 :(得分:2)
\u03C0
是一个单个Unicode字符,即pi字符的另一种表示形式。一串字符'\','u'等是另一回事。