1) Aż w komentarzach już wspomniano, Twój napis jest wykonany z 5 złożonych sekwencji znaków (lub klastrów charakter, jeśli wolisz). Po podziale według unichar
s jako metoda NSString
otrzymuje numer 7, który jest numerem unichar
, który reprezentuje ciąg w pamięci.
2) Widocznie UITextField
i UITextView
obchodzenia sznurki w zrozumiały sposób o unichar. Dobra wiadomość, więc możesz. Zobacz # 3.
3) Można uzyskać liczbę złożonych sekwencji znaków za pomocą niektórych NSString
API, która zajmuje się prawidłowo skomponowanych sekwencji znaków. Szybki przykład upiekłam się bardzo szybko, to mały NSString
kategoria:
@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
Znowu jest to szybki kod; ale powinno zacząć. A jeśli użyjesz go tak:
NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);
Zobaczysz, że uzyskasz pożądany rezultat.
o wyjaśnienie w dogłębne NSString
API sprawdzeniu WWDC 2012 Session 215 Video "Text and Linguistic Analysis"
na oko, powiedziałbym kodowanie znaków - liczy NSString liczbę bajtów vs liczby znaków? może 2 z twoich bohaterów są faktycznie znaków wielo-bajtowych i NSString wycieczki do ... jak stwierdził, że to przypuszczenie – AndrewP
(# ゚ Д ゚) ma 7 znaków, jeśli skopiować i wkleić go w edytorze tekstowym. – Bahamut
"Wygląda jak" sześcioznakowe słowo, ponieważ na końcu jest spacja. Jednak "Д ゚" jest w rzeczywistości dwoma znakami w Unicode. – borrrden