APP中遇到一个问题
使用SDWebImage
加载图片的时候图片没有显示出来, 后来看了图片的链接,里面有汉字,造成 NSStrng
转 NSURL
的时候出问题.
怎么解决呢?
首先我想到了,给NSString使用UFT-8转码 成功解决了问题, 但是整个项目都是使用
[NSURL URLWithString:string]
这个方法来实现的, 修改量巨大, 于是想到了Runtime来替换掉系统的
[NSURL URLWithString:string]
这个方法
首先是+(void)load
+(void)load{
Method urlWitStrMethod = class_getClassMethod(self, @selector(URLWithString:));
Method urlutf8Method = class_getClassMethod(self, @selector(initWithUTF8String:));
method_exchangeImplementations(urlWitStrMethod, urlutf8Method);
}
然后是initWithUTF8String
方法的实现
+(NSURL *)initWithUTF8String:(NSString *)URLString{
// 非空判断
if (URLString.length < 1) {
return nil;
}
NSString *str = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url;
if ([NSURL hasChinese:URLString]) {
url = [[NSURL alloc] initWithString:str];
}else{
url = [[NSURL alloc] initWithString:URLString];
}
return url;
}
事已至此 以为一切都已经结束了, 然鹅,有些图片的地址,已经被转过一次码了, 我再转码,仍然会有问题! 于是
判断是否有汉字
+ (BOOL)hasChinese:(NSString *)str {
for(int i=0; i< [str length];i++){
int a = [str characterAtIndex:i];
if( a > 0x4e00 && a < 0x9fff)
{
return YES;
}
}
return NO;
}
至此,算是基本上解决问题