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