??前言: 近日,由于使用阿里云的OSS圖片存儲服務器,發現一個相對不一樣的問題。首先是我們將圖片存儲在阿里云服務器上,然后在獲取到OSS 圖片存儲路徑后拼接上x-oss-process=image/info,以獲取圖片尺寸等相關信息。
??那么問題來 了,在使用NSURLSession請求拼接后的URl后,有部分圖片信息返回的數據格式無法使用NSJSONSerialization進行解析,提示錯誤為Unable to convert data to string around character 625,然后就是巴拉巴拉的找Google了半天,也沒有合適的解決辦法。首先說一下疑問:1.我們將請求到的data轉成NSString后,放到json格式校驗工具顯示沒有問題,然后NSJSONSerialization一解析就崩潰
??然后我打印了一下data的length是大于0的,說明啥?有數據,但是解析不了,那么肯定是編碼格式問題了,由于本人對編碼格式不確定是哪種,就此耽擱了半天
??下午再次搜索后發現,我請求的這個阿里云服務器WebService返回的是GB2312編碼數據。IOS解析要轉換為UTF8編碼格式的數據!那么,思路就來了,肯定是將GB2312格式的數據轉換為UTF8的!
上代碼:
NSStringEncoding encode =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *result = [[NSString alloc] initWithData:data encoding:encode];
NSdata *data = [result dataUsingEncoding:NSUTF8StringEncoding];
??那么,接著就可以使用NSJSONSerialization解析數據了!問題是解決了,由此才生兩個疑問:
1.怎么確定返回的數據格式是什么編碼格式呢?有知道的,求分享
2.編碼格式的區別是什么?與kCFStringEncodingGB_18030_2000相似的枚舉很多,區別是什么?那么,我可以給你一點參考一下,學習一下GB2312 ,GBK ,GB18030等的區別,大學記得學過,但是都還給老師了,就此溫習一下