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