Charles中文乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Charles中文乱码相关的知识,希望对你有一定的参考价值。

参考技术A

正常情况下, Server 端提供给 Client 端的所有接口的 Response 中应该有字符集的 Header 设置:

如果没有,可能造成某些平台的 Client 中文解析乱码。

很不幸,我们团队的 Server 端开发人员的意识不够,很多 JSON 接口都不规范,用 Charles 抓包中文乱码。

以下为解决 Charles 中文乱码的方案:

右键Charles->在Finder中显示->右键 Charles.app ->显示包内容->Contents->双击打开Info.plist

网上很多人都是用这种方式,但是我试了下,没有成功,我的 Charles 版本是 v3.11.1

打开 Charles ->Tool->Rewrite->勾选 Enable Rewrite ->点击 Sets 面板 Add 按钮->右侧 Locations 面板点击 Add 按钮输入url匹配规则(你server端的url规则)->右侧 Rules 面板点击 Add 按钮输入,详情如下图:

注意 :这里需要根据你 Server 端返回数据的具体情况来,因为我的 Server 端并没有返回 Content-Type 这个Header,并且所有接口都返回了 Server: Apache-Coyote/1.1 这个Header,所以我这个 Rewrite 规则实际上是修改 Server: Apache-Coyote/1.1 为 Content-Type: application/json;charset=UTF-8

Charles Map Local 中文显示乱码问题

用Charles对请求Map Local后手机上看中文是乱码?

 

你是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

参考资料:http://www.paincker.com/charles-charset-incorrect

感谢博主

以上是关于Charles中文乱码的主要内容,如果未能解决你的问题,请参考以下文章

Charles中文乱码全解

charles3.8的中文乱码怎么解决

(Charles_其他1)Charles Contents中文乱码,一分钟搞定!

谁用过Charles啊?里面乱码问题怎么解决

Charles中Contents乱码的解决【证书问题】

Charles中文乱码解决