image form instagram
痛點:最近使用Alamofire進行數據請求,發現使用HandyJSON解析String對象時,中文屬性值全部亂碼;
產生的原因:不管是request亂碼還是response亂碼,其實都是由于客戶端(瀏覽器)跟服務器端采用的編碼格式不一致造成的。以request亂碼為例:瀏覽器向服務器發送請求,因為瀏覽器與服務器之間的通信實質上是socket流,所以要先將請求參數(字符)轉換成字節,也就是編碼過程,服務器接收到請求參數后進行解碼(字節轉字符),然后封裝到request對象中。如果客戶端的編碼與服務器端的解碼不統一,就會導致通過request獲取到的請求參數的值是亂碼。
解決方案:結合項目分析,因為該接口返回的是JSON,所以我改用了Alamofire中的responseJSON鏈方法,替換原來的responseString()。同時項目數據對象模型用的是HandyJSON,所以同時又引用了SwiftyJSON進行輔助解析成String對象供HandyJSON使用,具體解決方案如下圖:(T:為HandyJSON泛型)