使用escape将NSString转换为unicode

时间:2013-03-14 16:45:45

标签: ios objective-c unicode nsstring

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相同的结果。但事实并非如此。知道如何解决这个问题吗?

3 个答案:

答案 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'等是另一回事。