1
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 相同的结果。但它没有。知道如何解决这个问题吗?

4

3 回答 3

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);
于 2013-03-14T16:58:10.913 回答
2

答案就在你的问题中。

你说这是 UNICODE 字符 \u03C0,而不是 UNICODE 字符串。

因此,当您使用stringByAppendingString:它时,它会返回stringto string3,而不是字符。

于 2013-03-14T16:48:33.803 回答
2

\u03C0一个单一的 Unicode 字符,即 pi 字符的另一种表示形式。字符串 '\'、'u' 等是另一回事。

于 2013-03-14T16:52:45.133 回答