针对URL无法识别中文的问题,可以使用下面的方法处理
1.在10.11之前:(目前该方法已经被苹果弃用,但仍可以运行)
NSString *param = @"中秋节";
// MacOS 10.11之前的方法
NSString *result = (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(nil,
(CFStringRef)param, nil,
(CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8));
NSString *tempURL = [@"open https://baike.baidu.com/item/" stringByAppendingString:result];
2.在10.11之后:
NSString *param = @"中秋节";
// MacOS 10.11之后的方法
NSString *encodeParam = [param stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[]"].invertedSet];
NSString *url = [NSString stringWithFormat:@"open https://baike.baidu.com/item/%@", encodeParam];
//通过terminal运行
[self terminalCmd:url];
3.最后将转换后的URL字符串通过terminal运行:
-(NSString *)terminalCmd:(NSString *)cmd
{
NSString *string = @"";
@synchronized(self){
@autoreleasepool {
@try {
NSTask *task = [NSTask new];
[task setLaunchPath:@"/bin/sh"];
NSArray *argument = [[NSArray alloc] initWithObjects:@"-c",cmd,nil];
[task setArguments:argument];
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
[task setStandardError:pipe];
NSFileHandle *fileHandle = [pipe fileHandleForReading];
[task launch];
NSData *data = [fileHandle readDataToEndOfFile];
string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
[task setTerminationHandler:^(NSTask * task) {
[[task.standardOutput fileHandleForReading] closeFile];
[[task.standardError fileHandleForReading] closeFile];
}];
} @catch (NSException *exception) {
NSLog(@"调用命令行失败:%@", exception.reason);
} @finally {
}
}
}
return string;
}