Я использую CFStringTokenizer, чтобы разбить загрузку текста на слова, но у меня возникают трудности при соединении с любой кодировкой, используемой CFString и UTF8.Учтите это:
NSString *theString = @"Lorem ipsum dolor sit amet!";
const char *theCString = [theString cStringUsingEncoding:NSUTF8StringEncoding];
tokenizer = CFStringTokenizerCreate(kCFAllocatorDefault,
(__bridge CFStringRef)theString,
CFRangeMake(0, [theString length]),
kCFStringTokenizerUnitWordBoundary,
locale);
while ((tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer)) != kCFStringTokenizerTokenNone) {
tokenRange = CFStringTokenizerGetCurrentTokenRange(tokenizer);
memcpy(resultPtr, theCString+tokenRange.location, tokenRange.length);
}
К сожалению, диапазон, сообщаемый токенизатором, неверен при попытке чтения из строки C, если встречаются какие-либо не-ascii символы.Как я могу получить правильный диапазон от токенизатора, чтобы можно было извлечь правильные символы из моей строки C?
Чтобы уточнить, вещи memcpy немного сложнее, чем выше, и необходимы для производительностина моем целевом устройстве, iPhone.Так что я даже не могу ничего сделать, как создать подстроку CFString и преобразовать ее, мне нужен диапазон в строке C.Есть ли способ сделать это без переопределения различных библиотек границ слов, чтобы заставить его работать в различных локалях, с которыми мне нужно работать?(это как можно больше, поэтому я не могу просто перебрать поиск '' к сожалению ..)
Алек