Electron 下对 web 微信抓包 HTTP 请求结果有中文乱码,如何解决?

2016-04-04 22:31:50 +08:00
 whahuzhihao

在逼乎和 stackoverflow 上都提问了,在这里继续寻找老司机。

用 Electron 把 web 微信包了一层,然后根据官方文档,使用 chrome-devtools 的 network 对 HTTP 请求进行抓包。但是在一个 POST 的 response 中,返回的是一个 JSON 字符串,里面的中文字段值是乱码。

根据 response 的 headers ,能看到服务端并未给出这次返回的 charset ,所以猜测 node 里是当做默认编码(Latin_1)解码的,所以造成了乱码。但理论上字符的二进制序列应该是对的,所以我用 Buffer 转了一次码

let content = new Buffer(e.Content, "binary").toString();

结果在有些情况下确实可以使用,但是有些字符不能准确转码。我直接打印了 Buffer 的内容,看字符的 16 进制内容。结果发现有的汉字编码并不对,比如:

"你好" => E4 BD A0 E5 A5 BD, √
"啊" => e5 22 60, ×    //correct code is E5 95 8A

不知道该如何解决啊?看了官方 web 微信的 js 文件,并未对字段进行转码处理,难道是 angular 里自带转码么?

其实不只是node里打印出来是乱码,直接在chrome里用开发者工具看,就是乱码,但显示在网页上就是好的。

6396 次点击
所在节点    Node.js
2 条回复
ggicci
2017-11-20 01:16:25 +08:00
这是 chrome devtools 的 BUG,请问 up 主后面怎么解决的?
whahuzhihao
2017-11-20 10:42:45 +08:00
@ggicci 后面直接放弃了啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/268536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX