throws ; 编码 gb2312和utf-8之间转换

16 篇文章 0 订阅
6 篇文章 0 订阅

swift 中,带有throws关键字函数的调用和加载HTML5时,编码 gb2312和utf-8之间转换。

这篇文章,主要是为了方便以后再次用到时的查找,所以标题随意了点。

在使用UIWebView加载HTML5时,OC代码如下:

 

         NSString *path = [[NSBundle mainBundle] bundlePath];
         NSURL *baseURL = [NSURL fileURLWithPath:path];
         NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index"
         ofType:@"html"];
         NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath
         encoding:NSUTF8StringEncoding
         error:nil];
         [self.webView loadHTMLString:htmlCont baseURL:baseURL];
 

在swift中,直接使用相应函数方法会报错,查找发现,函数

 

 

        String.init(contentsOfFile: <#T##String#>, encoding: <#T##String.Encoding#>) throws

然后,发现,对于带有关键字throws的函数,调用时,需要使用do-catch方法,格式

 

 

do{ 
    xxxxxxxx
   }catch{
    xxxxxxxx
        } 
    xxxxxxxx
   }catch{
    xxxxxxxx
        }

而有时加载的HTML5文件编码格式为gb2312,解码需要做如下操作:

 

 

let cfEnc = CFStringEncodings.GB_18030_2000
let enc = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEnc.rawValue))
let enc_ = String.Encoding.init(rawValue: enc)
let htmlCont = try String.init(contentsOfFile: htmlPath!, encoding: enc_)            webView.loadHTMLString(htmlCont, baseURL: bathURL)

以上,全部代码如下:

 

 


        let path = Bundle.main.bundlePath;
        let bathURL = URL.init(fileURLWithPath: path)
        let htmlPath = Bundle.main.path(forResource: "index", ofType: "html")//注释:index.html编码格式不是utf-8,而是gb2312
        let cfEnc = CFStringEncodings.GB_18030_2000
        let enc = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEnc.rawValue))

        do{
            let enc_ = String.Encoding.init(rawValue: enc)
            let htmlCont = try String.init(contentsOfFile: htmlPath!, encoding: enc_)
            webView.loadHTMLString(htmlCont, baseURL: bathURL)
            print("sucess+htmlPath="+htmlPath!)
            
        }catch{
        }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值