以前接口都是 PHP 写的, echo 出 JSON 串给页面 jQuery Ajax 用的.
- //.PHP file format gbk
- public function queryHeroList(){
- $hero = '[{"ename":105,"cname":" 廉颇 ","title":" 正义爆轰 ","pay_type":10,"new_type":0,"hero_type":3,"skin_name":" 正义爆轰 | 地狱岩魂 "}]';
- echo iconv('gbk','utf-8',$hero);exit();
- }
返回的是 unicode 编码的, 如下格式:
[{"ename":120,"cname":"\u767d\u8d77","title":"\u6700\u7ec8\u5175\u5668","new_type":0,"hero_type":3,"skin_name":"\u6700\u7ec8\u5175\u5668|\u767d\u8272\u6b7b\u795e|\u72f0"}]
浏览器看到的是如下 response head
奇怪的是,,, 在 pc 浏览器上, 一切正常, axios 取到的数据, 插入到页面上, 显示也没有乱码. 但是, 放到 iPhone UC 浏览器上就有问题了, 乱码.
我们看下 axois 的参数:
- // `responseType` indicates the type of data that the server will respond with
- // options are 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
- responseType: 'json', // default
- // `responseEncoding` indicates encoding to use for decoding responses
- // Note: Ignored for `responseType` of 'stream' or client-side requests
- responseEncoding: 'utf8', // default
默认按照 utf-8 格式去解析. 估计是这个原因了,
因此, 咱们最好还是在 PHP 接口上显示注明一下编码 Header, 如下:
- //.PHP file format gbk
- public function queryHeroList(){
- $hero = '[{"ename":105,"cname":" 廉颇 ","title":" 正义爆轰 ","pay_type":10,"new_type":0,"hero_type":3,"skin_name":" 正义爆轰 | 地狱岩魂 "}]';
- header("Content-Type:application/json;charset=UTF8"); //PHP 文件是 gbk 格式, 但是吐出数据声明是 utf8 的.
- echo iconv('gbk','utf-8',$hero);exit();
- }
即可解决问题了.
来源: https://www.qcloud.com/developer/article/1361070