【发布时间】:2011-12-29 00:01:19
【问题描述】:
我正在使用 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);
}
不幸的是,如果遇到任何非 ascii 字符,则在尝试从 C 字符串中读取时,标记器报告的范围不正确。如何从标记器中获取正确的范围,以便能够从我的 C 字符串中提取正确的字符?
为了澄清,memcpy 的东西比上面的要复杂一些,并且对于我的目标设备 iPhone 上的性能是必需的。所以我什至不能做任何事情,比如创建一个 CFString 子字符串并转换它,我需要 C 字符串中的范围。有没有办法在不重新实现各种单词边界库以使其适用于我需要使用的各种不同语言环境的情况下做到这一点? (这是尽可能多的,所以我不能只是迭代寻找''不幸..)
亚历克
【问题讨论】:
标签: ios cocoa-touch cocoa core-foundation