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)。