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文字列ではなく、UNICODE文字\u03C0と言います。

したがって、使用すると、文字ではなく、にstringByAppendingString:戻ります。stringstring3

于 2013-03-14T16:48:33.803 に答える
2

\u03C0単一のUnicode文字です。つまり、円周率文字の別の表現です。文字「\」、「u」などの文字列は別のものです。

于 2013-03-14T16:52:45.133 に答える