NSDataDetector识别中文不准的问题

NSDataDetector这个类在处理中文时,有bug,
比如:www.163.com和Www.qq.com 会被识别成 :http://www.163.xn--comwww-k76j.qq.com
又比如:www.wx.com好咯后悔你没有我的时候你会发现你是www.123.com
会被识别成:http://www.wx.xn--comwww-r88itsab64rqwtswaj2ee83a1x0aduf0mud5am8jgx2bbo8avun.123.com
毫无规律可言。这应该是处理中文时遇到编码问题。直接把乱码返回来了。

识别方法如下:

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
NSArray *matches = [detector matchesInString:@"www.163.com和Www.qq.com" options:0 range:NSMakeRange(0, textString.length)];
for (NSTextCheckingResult *match in matches) {
        if ([match resultType] == NSTextCheckingTypeLink) {
            NSRange matchRange = [match range];
            NSLog(@"%@",match);
          //http://www.163.xn--comwww-k76j.qq.com
    }
}

找了一圈,没找到解决办法,遂找NSDataDetector的父类NSRegularExpression。

NSError *error;
NSString *regulaStr = @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
    
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regulaStr options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *arrayOfAllMatches = [regex matchesInString:label.text options:0 range:NSMakeRange(0, [label.text length])];

NSMutableArray *arr=[[NSMutableArray alloc]init];
for (NSTextCheckingResult *match in arrayOfAllMatches)
{
    NSString* substringForMatch;
    substringForMatch = [label.text substringWithRange:match.range];
    [arr addObject:substringForMatch];
}

ok ,问题得到解决。

你可能感兴趣的:(NSDataDetector识别中文不准的问题)