用Charles对request进行Map Local后,app上看返回的中文是乱码?
是Map Local的文件编码有问题?是Charles设置有问题?是电脑环境有问题?哈哈,都不是
你是Android开发?你的项目里网络框架用的是volley?是不是猜得很准?
对,万万没想到问题出在volley上,简单说就是 volley获取从网络来的信息流时会对其进行解码,而解码方式是根据返回数据的header中的content-type来进行的,如果content-type为空,则默认解码方式是iso-8859-1,一个只支持英文和数字的字符集,不支持中文;同时又因为我们正常走接口时返回的数据是带header的,而且会指定content-type是utf-8,所以这时候volley解码不会有问题,但是map local的时候因为数据不带header,所以volley使用了默认的解码方式,导致出现了乱码
解决方式是利用 charles的rewrite功能,替换response内容,把返回结果的content-type替换成utf-8
具体步骤是:
1.Tools中启用Rewrite功能
2.在打开窗口中点击左侧中的Add按钮,添加一条Rewrite规则
3.点击右上的Locations中的Add,可以全部留空匹配所有请求。也可以根据需要过滤指定的接口,点击OK
4.点击右下的Rules中的Add按钮,顶部下拉框选择添加一条type为Modify Header的规则,勾选Response,在Match的Header中添加匹配Content-Type = text/plain的项,并在replace中添加Content-Type = application/json;charset=UTF-8的项,点击OK
第四步配置如图:
参考资料:http://www.paincker.com/charles-charset-incorrect 感谢这位博主