まず第一に、あなたのコードは正しくありません。characterAtIndex
を返すので、フォーマット指定子として(大文字)をunichar
使用する必要があります。@"%C"
正しいフォーマット指定子を使用しても、すべてのUnicode文字を単一ので表すことができるわけではないため、コードは安全ではなく、厳密に言えば、依然として正しくありませんunichar
。サブ文字列ごとに常にUnicode文字列を処理する必要があります。
文字列を文字のシーケンスと考えるのが一般的ですが、NSStringオブジェクト、または一般にUnicode文字列を操作する場合、ほとんどの場合、個々の文字よりもサブ文字列を処理する方が適切です。これは、ユーザーがテキスト内の文字として認識するものが、多くの場合、文字列内の複数の文字で表される可能性があるためです。
あなたは間違いなく文字列プログラミングガイドを読むべきです。
最後に、あなたにぴったりのコードは次のとおりです。
NSString *danishString = @"æøå";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[danishString length]];
[danishString enumerateSubstringsInRange:NSMakeRange(0, danishString.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[characters addObject:substring];
}];
NSLog(@"%@", characters);
「\Uxxxx」という形式の「奇妙な文字」が表示されている場合は、それは正しいです。NSArray
これは、 bydescription
メソッドのデフォルトの文字列化動作です。「通常の文字」を表示したい場合は、これらのUnicode文字を1つずつ印刷できます。
for (NSString *c in characters) {
NSLog(@"%@", c);
}