4

デンマーク語の文字を含む文字列をNSMutableArrayに分離しようとしています。しかし、何かが機能していません。:(

私のコード:

NSString *danishString = @"æøå";

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[danishString length]]; 

for (int i=0; i < [danishString length]; i++) 
{ 
     NSString *ichar = [NSString stringWithFormat:@"%c", [danishString characterAtIndex:i ]]; 
     [characters addObject:ichar]; 
} 

私がdanishStringのNSLogで行う場合、それは機能します(æøåを返します)。

しかし、文字(配列)に対してNSLogを実行すると、非常にスタンジな文字が表示されます-何が問題になっていますか?

/ Morten

4

4 に答える 4

2

まず第一に、あなたのコードは正しくありません。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);
}
于 2012-01-05T12:02:00.700 に答える
0

あなたの例でicharは、はタイプではありませんNSStringが、unichar。必要に応じNSStringて、代わりに部分文字列を取得してみてください。

NSString *danishString = @"æøå";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[danishString length]]; 

for (int i=0; i < [danishString length]; i++) 
{ 
    NSRange r = NSMakeRange(i, 1);
    NSString *ichar = [danishString substringWithRange:r]; 
    [characters addObject:ichar]; 
}
于 2012-01-05T09:45:33.090 に答える
0

次のようなことを行うことができます。これはデンマーク語の文字では問題ないはずですが、文字を分解すると機能しなくなります。詳細については、文字列プログラミングガイドを読むことをお勧めします。

NSString *danishString = @"æøå";
NSMutableArray* characters = [NSMutableArray array];
for( int i = 0; i < [danishString length]; i++ ) {
  NSString* subchar = [danishString substringWithRange:NSMakeRange(i, 1)];
  if( subchar ) [characters addObject:subchar];
}

これにより、すべてのコードポイントが文字で構成されていると仮定して、文字列が個々の文字の配列に分割されます。

于 2012-01-05T09:47:25.320 に答える
-1

文字のUnicodeを印刷しています。とにかく、どこでもユニコード(\ u付き)を使用できます。

于 2012-01-05T09:44:06.573 に答える