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{
        }



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