Какие параметры поиска и сравнения я должен использовать для поиска китайских символов? - PullRequest
0 голосов
/ 22 марта 2012
enum {
    NSCaseInsensitiveSearch = 1,
    NSLiteralSearch = 2,
    NSBackwardsSearch = 4,
    NSAnchoredSearch = 8,
    NSNumericSearch = 64,
    NSDiacriticInsensitiveSearch = 128,
    NSWidthInsensitiveSearch = 256,
    NSForcedOrderingSearch = 512,
    NSRegularExpressionSearch = 1024
};

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    [self.filteredListContent removeAllObjects];
    for (Notice *notice in allNoticeArray)
    {   
        if ([scope isEqualToString:@"标题"]) 
        {
            NSComparisonResult result = [notice.title compare:searchText
                                                      options:NSWidthInsensitiveSearch
                                                        range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame)
            {
                [self.filteredListContent addObject:notice];
            }
        }
    }
}

searchText & notice.title - все китайские иероглифы.

Итак, какие параметры поиска и сравнения мне следует использовать?

Спасибо заранее. С наилучшими пожеланиями.

1 Ответ

1 голос
/ 08 мая 2012

Я думаю, NSWidthInsensitiveSearch хорошо использовать в вашем сценарии. (Что нужно только проверить, начинается ли заголовок с ключевого слова, верно?)

В китайских иероглифах нет таких понятий, как регистр и диакритические знаки. Если у вас нет дополнительных требований, таких как NSBackwardsSearch или других, NSWidthInsensitiveSearch подойдет, поскольку вы можете игнорировать разницу между формами западной и полной ширины и полушириной:

NSWidthInsensitiveSearch

Поиск игнорирует различия ширины в символах, которые имеют формы полной ширины и полуширины, как это происходит в наборах символов Восточной Азии.

Например, с помощью этой опции латинская строчная буква 'a' полной ширины (кодовая точка Unicode U + FF41) равна базовой латинской строчной букве 'a' (кодовая точка Unicode U + 0061).

...