这几天对接接口出现一个问题,嬿这个中文乱码。浏览器
小编自己由于这件事浪费了很多时间,因此天然是带有一点情绪,但描述中并无夸大,也但愿各位无论是对接或者是被对接的人可以互相体谅,不要老是踢皮球工具
事情是这样的。网站
接口调用出现了问题,由于中文“嬿”会乱码。编码
接口方一句话:那要看大家往接口传的是什么spa
小编本着心虚的态度赶忙看一下本身的代码(其实心中早已无语,因全部的中文都是按照文档指定的方式传的,且咱们系统中文字根本没有出现乱码的现象)blog
结果一看,对方接口文档里面的gb2312编码的码表里面根本没这个字。接口
好吧,截图给对方看。utf-8
接口方:给你个网站,你先看上面能不能解码。文档
小编再次被套路,点进去网站,哎,还真能够解码。神奇了,难道是我学艺不精???,并且这个网站上面还真的写着gb2312编解码(后来事实证实,这个网站实际用的是gbk解码!!!!)cli
此时同事恰好提到gbk能够兼容gb2312的事,小编脑壳一抽,想说那就试试看吧!
结果还真行,此时才发现,真的是套路满满。此时对接口方已经是鄙夷满满。
接口方:那你就用gbk吧
小编好意给的文档里面要改一下的建议彻底被无视
这还没完,由于这只是传数据的时候编码错误,还有返回数据时候的数据也不对!!
你们请注意,jdk中的httpclient的核心工具包中对于返回数据内容的解码,并不能强制指定编码,而是优先以返回的字符集编码进行解码,没有的时候才是以咱们指定的编码进行解码
因此其实接口方根本不须要在文档中告知返回的数据用什么编码,由于这都是在协议头中返回的,就是那个charset=utf-8
而若是接口方硬是传回一个错误的编码,将会致使咱们解码失败,一堆乱码。
这里小编再次受到接口方的暴击:客户端均可以设置编码的啊!
大哥、大叔、大爷!我知道浏览器即便选择了gb2312编码,仍然能够自动兼容到gbk,可是那是客户端,咱们是服务端,咱们只认协议
最终无奈妥协,在本身代码中作了,若是返回gb2312编码的时候,改用gbk,由于gbk兼容gb2312的