痛點(diǎn):最近使用Alamofire進(jìn)行數(shù)據(jù)請求,發(fā)現(xiàn)使用HandyJSON解析String對象時,中文屬性值全部亂碼陕见;
產(chǎn)生的原因:不管是request亂碼還是response亂碼,其實(shí)都是由于客戶端(瀏覽器)跟服務(wù)器端采用的編碼格式不一致造成的。以request亂碼為例:瀏覽器向服務(wù)器發(fā)送請求友酱,因?yàn)闉g覽器與服務(wù)器之間的通信實(shí)質(zhì)上是socket流,所以要先將請求參數(shù)(字符)轉(zhuǎn)換成字節(jié)柔纵,也就是編碼過程缔杉,服務(wù)器接收到請求參數(shù)后進(jìn)行解碼(字節(jié)轉(zhuǎn)字符),然后封裝到request對象中搁料。如果客戶端的編碼與服務(wù)器端的解碼不統(tǒng)一或详,就會導(dǎo)致通過request獲取到的請求參數(shù)的值是亂碼。
解決方案:結(jié)合項(xiàng)目分析郭计,因?yàn)樵摻涌诜祷氐氖荍SON霸琴,所以我改用了Alamofire中的responseJSON鏈方法,替換原來的responseString()昭伸。同時項(xiàng)目數(shù)據(jù)對象模型用的是HandyJSON,所以同時又引用了SwiftyJSON進(jìn)行輔助解析成String對象供HandyJSON使用梧乘,具體解決方案如下圖:(T:為HandyJSON泛型)