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

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
        }
而有时加载的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{
        }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章