百度了很多,可能处理方法还有其他的,但是目前就记录了一下自己的解决方法。
- 首先,用webView加载URL时,如果有汉字可能就加载不出来,需要对汉字转码;
- 其次,加载txt时,出现乱码时,先把txt里面的数据读取出来,然后对数据进行UTF-8转码;再加载到webview中。
- 代码如下:
为URL转码的方法如下:
+ (NSString *)turnUrlTOUTF8:(NSString *)url {
return [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"#%^{}\"[]|\\<> "].invertedSet];
}
解决txt加载乱码的代码如下:
//加载URL
- (void)loadURL:(NSURL *)pageURL {
NSString *fileType = [[pageURL lastPathComponent] lowercaseString];
if ([fileType hasSuffix:@".txt"]) {
NSString *lastName =[[pageURL lastPathComponent] lowercaseString];
//先判断是 TXT 文件
if ([lastName containsString:@".txt"]) {
NSData *data = [NSData dataWithContentsOfURL:pageURL];
// 加载二进制文件
NSString *mineType = [self mineType:pageURL];
[self.wkWebView loadData:data MIMEType:mineType characterEncodingName:@"UTF-8" baseURL:nil];
}
}else {
[self.wkWebView loadRequest:[NSURLRequest requestWithURL:pageURL]];
}
}
- (NSString *)mineType:(NSURL *)url {
NSURLResponse *response = nil;
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
return response.MIMEType;
}
另外一种方法,这种方式貌似比上面的方法更有效:
- (void)loadTxt:(NSURL *)pageURL {
NSString *lastName =[[pageURL lastPathComponent] lowercaseString];
if ([lastName containsString:@".txt"]) {
//如果为UTF8格式的则body不为空
NSString *body =[NSString stringWithContentsOfURL:pageURL encoding:NSUTF8StringEncoding error:nil];
//如果不是 则进行GBK编码再解码一次
if (!body) {
body =[NSString stringWithContentsOfURL:pageURL encoding:0x80000632 error:nil];
}
//不行用GB18030编码再解码一次
if (!body) {
body =[NSString stringWithContentsOfURL:pageURL encoding:0x80000631 error:nil];
}
if (body) {
body =[body stringByReplacingOccurrencesOfString:@"\n" withString:@"<br/>"];//替换换行符为HTML换行符
[self.wkWebView loadHTMLString:body baseURL:nil];
return;
}
[self.wkWebView loadRequest:[NSURLRequest requestWithURL:pageURL]];
}else{
NSURLRequest *request =[NSURLRequest requestWithURL:pageURL];
[self.wkWebView loadRequest:request];
}
}