MUSICAL SYMBOL G CLEFシンボルのように、U + FFFFより大きいユニコード文字を含むNSStringがあります。 NSStringを作成して表示することができます。NSStringで32ビットのユニコード文字を扱う方法
NSString *s = @"A\U0001d11eB"; // "AB"
NSLog(@"String = \"%@\"", s);
ログは正しく、3文字を表示します。これはNSStringがうまくいっていて、エンコーディングの問題がないことを伝えます。
String = "AB"
しかし、私はこの方法を使用して、すべての文字をループしようとすると、
- (unichar)characterAtIndex:(NSUInteger)index
すべてがうまくいきません。
タイプunicharは16ビットなので、私は音楽記号に間違った文字を取得すると予想しています。しかし、文字列の長さも間違っています!
NSLog(@"Length = %d", [s length]);
for (int i=0; i<[s length]; i++)
{
NSLog(@" Character %d = %c", i, [s characterAtIndex:i]);
}
ディスプレイ
Length = 4
Character 0 = A
Character 1 = 4
Character 2 = .
Character 3 = B
どのような方法で、私は正しく私のNSStringを解析して、私の3つのUnicode文字を取得するために使用する必要がありますか? 適切なメソッドは、wchar_tのような型をunicharの代わりに返すのが理想です。
は
。そんなにマーティンありがとう! – PatrickV