频道栏目
首页 > 程序开发 > web前端 > JavaScript > 正文
用 JSON 来避免中文乱码问题
2017-09-11 09:33:02         来源:我所有的向往  
收藏   我要投稿

问题来源

最近在用别人提供的 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 = "https://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

点击复制链接 与好友分享!回本站首页
上一篇:AngularJS基础概念介绍
下一篇:解决ajax请求自动增加时间戳问题
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站