用 JSON 来避免中文乱码问题

在使用 API 进行姓名和身份证号查询时遇到中文乱码问题,通过Wireshark抓包分析发现Ajax和Postman传输数据相同但结果不同。经过研究,发现问题出在中文编码上,解决方案是使用JSON.stringify()将数据转换为Unicode,确保网络传输时编码一致,从而避免中文乱码。总结指出JSON在网络传输中能自动处理Unicode编码,是解决此类问题的有效方法。

问题来源

最近在用别人提供的 API 搞事情(用姓名和身份证号查准考证号), 用 Postman 进行测试,提交的是表单里面含有中文。具体如下图:

搞事情

我按照上面的教程,确实可行,如下图:

一步一步来

乐于助人的我,想做个 Web 网站来帮助一些人,so,我开始用 Postman 进行测试。

第一步

我打开 谷歌游览器 的开发人员工具(F12) Network 项,看刚刚那个 Ajax 传输了啥,如图下:

很好

嗯~ 这么简单,我只需要做一个登录界面所有的问题就解决了,好,用Postman 测试一下吧(此时此刻我想我为啥要用 Postman 来进行测试)。

深坑

填好了 Postman 上的数据,点击 Send,什么???这是啥

深坑

程序员陷入了沉思,一直在想为什么。此后每天下班就一直在调这些东西。有一天灵感来了,我想这用 Wireshark 进行抓包,我就知道都传来啥,好打开 Wireshark 过滤条件为 tcp.port == 7066,抓的包如下:

游览器 Ajax:

Ajax

Postman:

Postman

我仔细的对比了下,每有什么问题呀,传输的数据都一样!

迷茫后的光芒

下班了,继续想。
两个传输的数据都一样,但结果不一样,试下把 jb(级别)的参数置为空:

哈哈

嗯!问题就在于中文编码这里!

我又试了不填中文,填中文的 Unicode 字符集。

问题

这里 Ajax 和 Postman 返回的值竟然都一样,那这就是编码问题!

如何解决

下面是好心人提供的源码。里面的 params = JSON.stringify(ks_data),等等这里 Ajax 传输的数据不就是 JSON 了吗。Postman 传输的是 key&value 形式。

var url = "http://app.cet.edu.cn:7066/baas/app/setuser.do?method=UserVerify";
var ks_data = {
"ks_xm": "",
"ks_sfz": "",
"jb": ""
};
var postdata = {
"action": "",
"params": JSON.stringify(ks_data)
};

光明

我猜想,JSON 在传输字符串的时候,会将所有的字符串转为 Unicode 字符集进行传输。嗯,官网就是这样写的!

json

总结

看来,JSON 很适合网络传输,只关心传输的编码一致就行了,里面的数据会自动传为 Unicode 字符集的。
当这个问题解决时,已经有好多个人的网站可以查了。
最后我四级并没有过。。。
最后的最后这个查准考证的 API,是一个 App 的。

APP

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值