1) Come molti nei commenti hanno già detto, La stringa è fatto di 5 sequenze di caratteri composte (o cluster di caratteri, se si preferisce). Quando si analizza per unichar
s come il metodo NSString
di length
si ottiene un 7 che corrisponde al numero di unichar
s necessario per rappresentare la stringa in memoria.
2) A quanto pare la UITextField
e UITextView
sono la manipolazione del corde in modo esperto UNICHAR. Buone notizie, anche tu puoi. Vedi # 3.
3) È possibile ottenere il numero di sequenze di caratteri composte utilizzando alcune delle API NSString
che gestiscono correttamente le sequenze di caratteri composte. Un esempio veloce ho cotto up, molto rapidamente, è un piccolo NSString
categoria:
@implementation NSString (ComposedCharacterSequences_helper)
-(NSUInteger)numberOfComposedCharacterSequences{
__block NSUInteger count = 0;
[self enumerateSubstringsInRange:NSMakeRange(0, self.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){
NSLog(@"%@",substring); // Just for fun
count++;
}];
return count;
}
@end
Anche in questo caso è il codice rapido; ma dovrebbe iniziare. E se lo usi in questo modo:
NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);
Vedrai che ottieni il risultato desiderato.
Per una spiegazione dettagliata della NSString
API controllare il WWDC 2012 Session 215 Video "Text and Linguistic Analysis"
Ad una ipotesi, direi codifica dei caratteri: NSString conta il numero di byte rispetto al numero di caratteri? forse 2 dei tuoi personaggi sono in realtà caratteri multi-byte, e NSString scatta ... come detto, questa è una supposizione – AndrewP
(# ゚ Д ゚) ha 7 caratteri se la copi e la incolli in un editor di testo. – Bahamut
"Sembra" una parola di 6 caratteri perché c'è uno spazio alla fine. Tuttavia "Д ゚" è in realtà due caratteri in unicode. – borrrden