1) Wie viele in den Kommentaren bereits erwähnt, wird Ihre Kette von 5, die aus Zeichenfolgen (oder Zeichen-Cluster gemacht, wenn Sie bevorzugen). Wenn es durch unichar
s wie NSString
s length
Methode zerlegt wird, erhalten Sie eine 7, die die Zahl unichar
s ist, die es benötigt, um Ihre Schnur im Speicher darzustellen.
2) Anscheinend die UITextField
und UITextView
behandeln die Saiten in einer unichar versierten Weise. Gute Nachrichten, können Sie auch. Siehe # 3.
3) Sie können die Anzahl der zusammengesetzten Zeichenfolgen erhalten, indem Sie einige der NSString
API verwenden, die ordnungsgemäß mit zusammengesetzten Zeichenfolgen befasst. Ein kurzes Beispiel ich aufgebacken, sehr schnell ist, eine kleine NSString
Kategorie:
@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
Auch dies ist schnell Code; aber es sollte dich beginnen. Und wenn Sie es so verwenden:
NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);
Sie werden sehen, dass Sie das gewünschte Ergebnis erhalten.
Für eine ausführliche Erläuterung der NSString
API die WWDC 2012 Session 215 Video "Text and Linguistic Analysis"
Bei einer Schätzung, würde ich Zeichencodierung sagen - zählt NSString Anzahl der Bytes im Vergleich zu Anzahl der Zeichen? vielleicht sind 2 Ihrer Zeichen tatsächlich Multi-Byte-Zeichen, und NSString stolpert ... wie gesagt, das ist eine Schätzung – AndrewP
(# ゚ Д ゚) hat 7 Zeichen, wenn Sie es kopieren und in einen Texteditor einfügen. – Bahamut
Es "sieht" wie ein 6-stelliges Wort aus, weil am Ende ein Leerzeichen steht. "Д ゚" ist eigentlich zwei Zeichen in Unicode. – borrrden