iOS webView加载txt文件时乱码的处理

百度了很多,可能处理方法还有其他的,但是目前就记录了一下自己的解决方法。

  • 首先,用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];
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值