Charles設置MapLocal亂碼的解決

Charles是Mac系統中相對比較好用的抓包工具。用Charles抓包時,常會用MapLocal功能,把不同的接口映射到不同的本地Json文件,方便測試。我會把一些常用的接口Response數據放到一個文件夾裏,有需要的時候隨時可以重複利用。

但是Charles設置MapLocal總是會出現亂碼,包括網上很多Charles教程中的截圖也可以看到亂碼,但是網上沒有找到解決方案,沒有人提出怎麼解決這個問題。

覺得可能是本地文件編碼格式不對,於是改了MapLocal所映射本地json文件的編碼,發現亂碼會發生變化。

又感覺可能是Charles的BUG。後來試了下發現只有Android中會亂碼,而iOS中竟然沒有亂碼。

於是懷疑是客戶端代碼相關的問題,APP用的網絡框架是Volley,網上找了下“Volley Charles 亂碼”,終於找到了原因:

在Response的Header中如果沒有指定編碼,Volley會默認使用ISO-8859-1,不支持中文,導致亂碼(其他網絡框架可能也會有同樣問題)。解決思路是,讓返回的數據Header中Content-Type字段聲明charset=UTF-8

參考:http://my.oschina.net/u/1247737/blog/393959

看了下Charles中MapLocal,Content-Type中果然沒有聲明編碼。

在菜單中找了找,有個Rewrite功能,嘗試了一下,順利解決了問題。

1、選擇Tools – Rewrite

2、勾選Enable Rewrite啓用Rewrite功能。點擊左側Sets中的Add按鈕,添加一條Rewrite規則,可以設置一個名字。

3、點擊右側Locations中的Add,彈出窗口如下。可以全部留空匹配所有請求。也可以根據需要過濾指定的接口,然後點擊OK確認。

4、點擊Rules中的Add按鈕,添加一條規則,彈出窗口中設置如下。修改Response的Header,匹配Content-Type = text/plain的項,並將其替換成Content-Type = application/json;charset=UTF-8(根據實際情況進行設置)。點擊OK保存。

5、最終設置好後的效果如下。再次使用MapLocal功能時,發現亂碼問題已經解決了(前提是所映射的本地文件也是UTF-8編碼,通常在Mac系統中,默認支持中文的編碼就是UTF-8)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章