uni-app uni.request 在iOS平台访问特定接口时数据解析出现乱码
uni-app uni.request 在iOS平台访问特定接口时数据解析出现乱码
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 11.6.2 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:11.6.2 (20G314)
HBuilderX类型:正式
HBuilderX版本号:3.4.7
手机系统:iOS
手机系统版本号:iOS 15
手机厂商:苹果
手机机型:iPhone 13
页面类型:nvue
vue版本:vue2
打包方式:云端
示例代码:
const keyword = '周杰伦';
const curpage = 1;
const target_url =
'https://c.y.qq.com/soso/fcgi-bin/client_music_search_songlist?' +
'remoteplace=txt.yqq.playlist&format=json' +
`&page_no=${curpage - 1}&num_per_page=20&query=${keyword}`;
uni.request({
url: target_url,
header: {
Referer: 'https://y.qq.com/',
Accept: 'application/json; charset=utf-8',
},
success: (res) => {
console.log('api result: ', res)
}
})
`
更多关于uni-app uni.request 在iOS平台访问特定接口时数据解析出现乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你抓包 看一下 iOS 和 Android 的参数有何不同?
更多关于uni-app uni.request 在iOS平台访问特定接口时数据解析出现乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
iOS 和 Android 都真机运行上面的一段代码,抓包结果如下: Android:
curl -H “Accept: application/json; charset=utf-8” -H “Referer: https://y.qq.com/” -H “user-agent: UNI-APP/1.0” -H “Host: c.y.qq.com” –compressed “http://c.y.qq.com/soso/fcgi-bin/client_music_search_songlist?remoteplace=txt.yqq.playlist&format=json&page_no=0&num_per_page=20&query=王心凌”
iOS:
curl -H “Host: c.y.qq.com” -H “Accept: application/json; charset=utf-8” -H “Referer: https://y.qq.com/” -H “User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Html5Plus/1.0 (Immersed/20) uni-app” -H “Accept-Language: zh-CN,zh-Hans;q=0.9” –compressed “http://c.y.qq.com/soso/fcgi-bin/client_music_search_songlist?remoteplace=txt.yqq.playlist&format=json&page_no=0&num_per_page=20&query=王心凌”
看起来 iOS 多了一个 header,Accept-Language,我在代码里面把这个 Accept-Language 设置成空值也是同样的结果,求大佬指点
回复 FandyPeng: 这个理论来说不应该影响你的请求才对 你们后端是有什么特殊要求吗?
回复 天生DR: 后端没什么特殊要求,但是客户端解析中文乱码,所以提 bug,希望你们能解决一下这种异常问题~
回复 FandyPeng: 你提供个可以稳定复现的demo吧
回复 天生DR: 我上面提交的示例代码,就是可以稳定复现的哦,新建个示例项目,把代码拷贝到 App.vue 执行,使用 iOS 设备真机执行,控制台打印的中文就是乱码
回复 FandyPeng: {“code”:0,“subcode”:0,“message”:"",“default”:0,“data”:{“display_num”:142406,“list”:[{“copyrightnum”:90,“createtime”:“2015-08-14”,“creator”:{“avatarUrl”:"",“creator_uin”:“554310825”,“encrypt_uin”:“7K4Poi6zNe-k”,“followflag”:0,“isVip”:0,“name”:“ðã 人é´éååï¹ï¼”,“qq”:554310825,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“2273731241”,“dissname”:“ç»å ¸é温åå¾·å”,“docid”:2273731241,“imgurl”:“http://p.qpic.cn/music_cover/iarc8OepZDsXKbTndmeIEv1wlzMbs01sYy35UFraLgr2hHgXJzFdIxg/600",“introduction”:"å德忝å人娱ä¹åå½±ãè§ãæå¤æ åå±ç代表ä¹ä¸ ä½ä¸ºææï¼ä»æ¯å人æ¼èºåæ¼èä¼…”,“listennum”:9309532,“score”:0.0,“song_count”:94},{“copyrightnum”:101,“createtime”:“2021-07-30”,“creator”:{“avatarUrl”:"",“creator_uin”:“467578052”,“encrypt_uin”:“7eCl7KSFoe4A”,“followflag”:0,“isVip”:0,“name”:“å¸é±¼å¤§é¥¼å¹²”,“qq”:467578052,“singerid”:0,“singermid”:"",“type”:2},“diss_status”:400,“dissid”:“8097568427”,“dissname”:“æè°¢éè§ä½ ï¼åå¾·ååºéååå¨å¹´”,“docid”:3802601131,“imgurl”:“http://qpic.y.qq.com/music_cover/BxQgxonwzUDWO6IdGBmJ9icHNa03DBahWVTXiamI5TyqCjfOIddV36fg/300",“introduction”:"åå¾·åï¼Andy Lauï¼ï¼1961å¹´9æåºçäºä¸å½é¦æ¸¯ï¼ä¸å½ç¥åæ¼åãææãè¯ä½äººãå¶çä…”,“listennum”:12685321,“score”:0.0,“song_count”:101},{“copyrightnum”:31,“createtime”:“2015-09-13”,“creator”:{“avatarUrl”:"",“creator_uin”:“2548933279”,“encrypt_uin”:“ow4PNeEioi-lNv”,“followflag”:0,“isVip”:0,“name”:“坿ºªæ”,“qq”:2548933279,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“3478828817”,“dissname”:“ç»å ¸éæ²ï¼åå¾·å”,“docid”:3478828817,“imgurl”:“http://p.qpic.cn/music_cover/Hetf08iay3WdWxDzKPuykxJ4k7unvMSamXLFx2XLr0qeK6syH4c5QQg/600",“introduction”:"åå¾·åå¨å¨±ä¹åï¼å¯æ¯æ 人ä¸ç¥æ äººä¸æä»æ¯å大天çä¹é¦ï¼æ¾åé ä¸ä¸ªï¼ç»å ¸çæ¶ä»£ …”,“listennum”:1833980,“score”:0.0,“song_count”:31},{“copyrightnum”:196,“createtime”:“2019-12-02”,“creator”:{“avatarUrl”:"",“creator_uin”:“919782311”,“encrypt_uin”:“NK6q7icAoi65”,“followflag”:0,“isVip”:0,“name”:“æ²é»æ¯é”,“qq”:919782311,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:500,“dissid”:“7324058270”,“dissname”:“åå¾·å(ç»å ¸ç²¤è¯å½è¯æåå¤§å ¨)”,“docid”:3029090974,“imgurl”:“http://p.qpic.cn/music_cover/LC3O6sywXQMYDBp2La8rFKVG1SB3v8VDurjkMugt4xKSiceUckhyNkw/600",“introduction”:"",“listennum”:593913,“score”:0.0,“song_count”:200},{“copyrightnum”:981,“createtime”:“2016-05-08”,“creator”:{“avatarUrl”:"",“creator_uin”:“117047451”,“encrypt_uin”:“oK6loevl7e45”,“followflag”:0,“isVip”:0,“name”:“殤”,“qq”:117047451,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:500,“dissid”:“1113892604”,“dissname”:"åå¾·åä¸è¾”,“docid”:1113892604,“imgurl”:“http://y.gtimg.cn/music/photo_new/T002R300x300M000001a2xuC37hCXS.jpg",“introduction”:" åä»çç»å ¸   ä½ å¼å¾æ¥æ “,“listennum”:614455,“score”:0.0,“song_count”:1000},{“copyrightnum”:77,“createtime”:“2017-02-20”,“creator”:{“avatarUrl”:””,“creator_uin”:“451836535”,“encrypt_uin”:“7e45Neos7Kok”,“followflag”:0,“isVip”:0,“name”:“æ äºè¯¥ç¿»ç”,“qq”:451836535,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“2354687995”,“dissname”:“å¼ å¦å åå¾·å éå¯å 黿”,“docid”:2354687995,“imgurl”:“http://p.qpic.cn/music_cover/4XicITmu6KUUHUWw4DOCUffAeFTAMdva6fXdqbcWgjMSfias3D5fM5sA/600",“introduction”:"馿¸¯å大天çæä¸å½é¦æ¸¯å°åº20ä¸çºª90年代ååºç°å¨æåçåä½éè¦äººç©ï¼ä»ä»¬æ¯å¼ å¦å…”,“listennum”:590137,“score”:0.0,“song_count”:78},{“copyrightnum”:93,“createtime”:“2017-09-13”,“creator”:{“avatarUrl”:"",“creator_uin”:“2523668458”,“encrypt_uin”:“ow4AoiCsNevkNn”,“followflag”:0,“isVip”:0,“name”:“ææ¯ä¸ªè®²éçç人”,“qq”:2523668458,“singerid”:0,“singermid”:"",“type”:2},“diss_status”:400,“dissid”:“3278495658”,“dissname”:“䏿¬¡å·¡æ¼è¿è¦çº¦ï¼åå¾·åæ¼å±ä¼liveåé”,“docid”:3278495658,“imgurl”:“http://p.qpic.cn/music_cover/rbKoTQdkPFC5FFC95YibQL3PSWHQMpSdLPaibicjicm2Domibd6P5hqmnGQ/600",“introduction”:"å ¶å®è½åå¬å仿¼å±ä¼ç次æ°åºè¯¥ä¹ä¸å¤äºï¼æä»¥å¯¹äºä»æ¯æ¬¡çå·¡æ¼é½åæçæãå½ç¶…”,“listennum”:11066266,“score”:0.0,“song_count”:95},{“copyrightnum”:30,“createtime”:“2016-09-06”,“creator”:{“avatarUrl”:"",“creator_uin”:“1787990180”,“encrypt_uin”:“oKSF7iEqoe6Fon”,“followflag”:0,“isVip”:0,“name”:“奿”,“qq”:1787990180,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:500,“dissid”:“834904082”,“dissname”:“åå¾·å 99æ¼å±ä¼”,“docid”:834904082,“imgurl”:“http://y.gtimg.cn/music/photo/album_500/51/500_albumpic_477051_0.jpg",“introduction”:"",“listennum”:565907,“score”:0.0,“song_count”:30},{“copyrightnum”:685,“createtime”:“2017-07-24”,“creator”:{“avatarUrl”:"",“creator_uin”:“3243633069”,“encrypt_uin”:“oi-PoiCioinsNv”,“followflag”:0,“isVip”:0,“name”:“3243633069”,“qq”:3243633069,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“3573606537”,“dissname”:"ä¸ç§å ¥éï¼åå¾·åä½åå ¨é”,“docid”:3573606537,“imgurl”:“http://y.gtimg.cn/music/photo_new/T017R500x500M000001oxIZt0ar5cC.jpg",“introduction”:"",“listennum”:1139252,“score”:0.0,“song_count”:700},{“copyrightnum”:102,“createtime”:“2020-03-20”,“creator”:{“avatarUrl”:"",“creator_uin”:“542340682”,“encrypt_uin”:“7KvAoivz7wcA”,“followflag”:0,“isVip”:0,“name”:"æ¸ æ³½ä¿ç§”,“qq”:542340682,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:400,“dissid”:“7483152612”,“dissname”:“åå¾·å | 天çåºå å¿ æ¯ç»å ¸”,“docid”:3188185316,“imgurl”:“http://p.qpic.cn/music_cover/M1w0TZyE4TeOibpyF04y7iah1TxIuoYIQ0L2TkIjTxRJzdr2goUgdUxw/600",“introduction”:"馿¸¯å大天çä¹ä¸ï¼åå¾·ååºè¯¥æ¯äººæ°æé«ï¼ç»¼åå屿好çä¸ä½ï¼å½±è§åææ²æ¹é¢é½…”,“listennum”:3824562,“score”:0.0,“song_count”:104},{“copyrightnum”:50,“createtime”:“2021-05-16”,“creator”:{“avatarUrl”:"",“creator_uin”:“1152921504712614297”,“encrypt_uin”:“oK6kowEAoK4z7eS5owC57e-q7z”,“followflag”:0,“isVip”:0,“name”:“仲å¤å¤æç©º”,“qq”:105767321,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:400,“dissid”:“7999197402”,“dissname”:“åå¾·åï¼âè¯âè¯ç»å ¸éæ²50馔,“docid”:3704230106,“imgurl”:“http://qpic.y.qq.com/music_cover/dicGqbYQxsnACTpib8E6ET1gAYLtswicoicmqVC3ia0N5QYHXo9zAjChlWDUD944XRQEm/300",“introduction”:"åå¾·åï¼äº«èªå人娱ä¹åçä¼ å¥äººç©ï¼ä½ä¸ºé¿çº¢ååå¹´ç»ä¹ ä¸è¡°çææå ¸èï¼è½ç¶åºé…”,“listennum”:4040437,“score”:0.0,“song_count”:50},{“copyrightnum”:56,“createtime”:“2017-01-22”,“creator”:{“avatarUrl”:"",“creator_uin”:“1215887192”,“encrypt_uin”:“oK-57KcF7i6qoc”,“followflag”:0,“isVip”:0,“name”:“ðð⨔,“qq”:1215887192,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“1449823059”,“dissname”:“åå¾·åç»å ¸”,“docid”:1449823059,“imgurl”:“http://y.gtimg.cn/music/photo/album_500/65/500_albumpic_54665_0.jpg",“introduction”:"åå¾·åç»å ¸ï¼ç»å ¸æ æã”,“listennum”:355022,“score”:0.0,“song_count”:57},{“copyrightnum”:314,“createtime”:“2017-02-15”,“creator”:{“avatarUrl”:"",“creator_uin”:“2407475174”,“encrypt_uin”:“owvz7ivl7K6l7n”,“followflag”:0,“isVip”:0,“name”:“梦æ·å¿ã”,“qq”:2407475174,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“1992849526”,“dissname”:“å¼ å½è£ï¼é»å®¶é©¹ï¼æ¢ è³è³ï¼åå¾·å”,“docid”:1992849526,“imgurl”:“http://p.qpic.cn/music_cover/O6KicBGDPA1umGln5GcdUYdb39zSpzBK98AwF26vJWdLqF6yadkGYRg/600",“introduction”:"é»å®¶é©¹å¼ å½è£æ¢ è³è³åå¾·åçæ¸¯å°ææçæé½å¨è¿éï¼å¼ å½è£åæ¢ è³è³å 为ä¸åºæ¯èµç»…”,“listennum”:146196,“score”:0.0,“song_count”:324},{“copyrightnum”:40,“createtime”:“2017-09-12”,“creator”:{“avatarUrl”:"",“creator_uin”:“314781768”,“encrypt_uin”:“oi6P7ic57iCF”,“followflag”:0,“isVip”:0,“name”:“Mamba Out”,“qq”:314781768,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:500,“dissid”:“3278370931”,“dissname”:“åå¾·å粤è¯ç»å ¸”,“docid”:3278370931,“imgurl”:“http://y.gtimg.cn/music/photo/album_500/38/500_albumpic_142538_0.jpg",“introduction”:"",“listennum”:92230,“score”:0.0,“song_count”:40},{“copyrightnum”:73,“createtime”:“2019-06-28”,“creator”:{“avatarUrl”:"",“creator_uin”:“2904004371”,“encrypt_uin”:“owEz7enz7eolov”,“followflag”:0,“isVip”:0,“name”:"仿æè²å¾ç¾”,“qq”:2904004371,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:300,“dissid”:“7039735628”,“dissname”:“æ 坿¿ä»£åå¾·å”,“docid”:2744768332,“imgurl”:“http://y.gtimg.cn/music/photo_new/T001R500x500M000003aQYLo2x8izP.jpg",“introduction”:"åå¾·å ï¼MHï¼JPï¼Andy Lau Tak-wahï¼1961å¹´9æ27æ¥ï¼ï¼ï¼é¦æ¸¯èåæ¼åå ¼ææï¼1990年代è·å°é¦…”,“listennum”:3219609,“score”:0.0,“song_count”:75},{“copyrightnum”:21,“createtime”:“2016-02-12”,“creator”:{“avatarUrl”:"",“creator_uin”:“365715616”,“encrypt_uin”:“oiCk7i6k7w6s”,“followflag”:0,“isVip”:1,“name”:“QQé³ä¹å· 峰榔,“qq”:365715616,“singerid”:0,“singermid”:"",“type”:1},“diss_status”:500,“dissid”:“2603021547”,“dissname”:“æè£æµ©åå¾·åé¢è¡æ¥èææ²è´ºå²æ¡£”,“docid”:2603021547,“imgurl”:“http://p.qpic.cn/music_cover/VV0r92V7YpdU50dyfViaLvkEf2YuVmA0sbBIdh44WNCAvyKttKnCrqQ/600",“introduction”:"QQé³ä¹å· å³°æ¦ æ°åé³ä¹æ°æ¹å 主æäººï¼åå”,“listennum”:3958656,“score”:0.0,“song_count”:21},{“copyrightnum”:35,“createtime”:“2020-02-28”,“creator”:{“avatarUrl”:"",“creator_uin”:“3233705956”,“encrypt_uin”:“oi-ioiSz7KEk7c”,“followflag”:0,“isVip”:0,“name”:“ä»å¤©åå¿è®°åé¥äº”,“qq”:3233705956,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:400,“dissid”:“7449967953”,“dissname”:“åå¾·åç°åºç²¾é · ç»å ¸æ°¸è¿”,“docid”:3155000657,“imgurl”:“http://p.qpic.cn/music_cover/5jNutIgus6eVebZYtB9uxw2djB46rzjzEICsCribjiasibAbpdoWMicF1g/600",“introduction”:"åå¾·åï¼Andy Lauï¼ï¼1961å¹´9æ27æ¥åºçäºä¸å½é¦æ¸¯ï¼ç±è´¯å¹¿ä¸æ°ä¼ ï¼ä¸å½é¦æ¸¯ç·æ¼…”,“listennum”:5049700,“score”:0.0,“song_count”:35},{“copyrightnum”:32,“createtime”:“2020-08-17”,“creator”:{“avatarUrl”:"",“creator_uin”:“545722971”,“encrypt_uin”:“7Kvk7i-ANKS5”,“followflag”:0,“isVip”:0,“name”:“æä¹ä¹ã”,“qq”:545722971,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:400,“dissid”:“7681233854”,“dissname”:“åå¾·å | æå欢è¿å大岿鿲”,“docid”:3386266558,“imgurl”:“http://qpic.y.qq.com/music_cover/W7suucKexcjnVj4NHH9SkbmHgBOLfJ2Bwa5HFsO9tSkRHF1mzoiacibw/300",“introduction”:"åå¾·åï¼èåæ¼ååææã1990年代被å°ä¸ºé¦æ¸¯âå大天çâä¹ä¸ï¼äº¦æ¯å¤§ä¸åå°åºæå …”,“listennum”:2337598,“score”:0.0,“song_count”:32},{“copyrightnum”:159,“createtime”:“2018-12-18”,“creator”:{“avatarUrl”:"",“creator_uin”:“1152921504870380449”,“encrypt_uin”:“oK6kowEAoK4z7ecloeoFoevPNv”,“followflag”:0,“isVip”:0,“name”:“Mume”,“qq”:263533473,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:500,“dissid”:“6009128247”,“dissname”:“åå¾·åæ¼å±ä¼ç°åºç”,“docid”:1714160951,“imgurl”:“http://y.gtimg.cn/music/photo/album_500/51/500_albumpic_477051_0.jpg",“introduction”:"",“listennum”:418053,“score”:0.0,“song_count”:162},{“copyrightnum”:18,“createtime”:“2008-10-02”,“creator”:{“avatarUrl”:"",“creator_uin”:“178038075”,“encrypt_uin”:“oKSFoeoFoeSk”,“followflag”:0,“isVip”:0,“name”:"æ°´å”,“qq”:178038075,“singerid”:0,“singermid”:"",“type”:0},“diss_status”:500,“dissid”:“10006075”,“dissname”:“Wonderful World馿¸¯æ¼å±ä¼2007-åå¾·å”,“docid”:10006075,“imgurl”:“http://img.1ting.com/images/album/0208/s1_080201130742.jpg",“introduction”:"[ft=#ff0000,,]2007-2008å¹´,æ¯åå¾·åçèå°å¹´[/ft],wonderful world concert,9,10,11æå¨ä¸å½å å…”,“listennum”:2516339,“score”:0.0,“song_count”:20}],“num_per_page”:20,“page_no”:0,“qc”:[],“sum”:142406,“uin”:0}}
回复 FandyPeng: 你这个有文档说明吗 返回的是什么编码格式的
回复 天生DR: 大概明白了 他返回的东西 里有类似html的字符串 iOS的UTF8 编码不出来 在uniapp的iOS 端我们这时候用了一个兜底的方案 但是兜底的编码格式对于中文又处理的有问题 所以出现乱码 我们现在在兜底方案一下 再处理一下
回复 天生DR: 感谢大佬,希望新版本可以修复哈
HBuilderX 3.5.0 alpha 已修复
非常感谢!
iqoo neo5机型也会有些问题,机型问题了,十一月中旬前会收集问题反馈一下,出问题快半年了。这个文章我保存了很有用哈哈哈
在使用 uni.request
进行网络请求时,如果在 iOS 平台上遇到数据解析出现乱码的情况,通常是由于编码问题导致的。以下是一些可能的原因和解决方法:
1. 检查响应头中的 Content-Type
确保服务器返回的响应头中 Content-Type
正确指定了编码格式,例如 Content-Type: application/json; charset=utf-8
。如果 charset
没有正确指定,iOS 可能会默认使用其他编码方式解析数据,导致乱码。
2. 手动指定编码
如果服务器没有正确返回 Content-Type
,你可以手动指定编码。uni.request
可以通过 responseType
参数指定响应的数据类型。例如:
uni.request({
url: 'https://example.com/api',
method: 'GET',
responseType: 'text', // 或者 'json' 如果返回的是 JSON 数据
success: (res) => {
console.log(res.data);
},
fail: (err) => {
console.error(err);
}
});
3. 处理二进制数据
如果返回的数据是二进制数据(例如图片、文件等),可以通过 responseType: 'arraybuffer'
来获取二进制数据,然后手动进行解码:
uni.request({
url: 'https://example.com/api',
method: 'GET',
responseType: 'arraybuffer', // 获取二进制数据
success: (res) => {
const data = new TextDecoder('utf-8').decode(res.data); // 手动解码
console.log(data);
},
fail: (err) => {
console.error(err);
}
});
4. 跨平台处理
不同平台可能会有不同的默认行为,建议在处理网络请求时,明确指定编码方式,并在不同平台上进行测试,确保数据解析一致。
5. 服务器端调整
如果可能,建议在服务器端调整响应头,确保返回的数据编码与客户端期望的一致。
6. 使用第三方库
如果以上方法无法解决问题,可以考虑使用第三方库来处理网络请求,例如 axios
,它提供了更丰富的配置选项来处理编码问题。
import axios from 'axios';
axios.get('https://example.com/api', {
responseType: 'text', // 或者 'json' 等
transformResponse: [function (data) {
// 手动处理数据
return data;
}]
}).then(response => {
console.log(response.data);
}).catch(error => {
console.error(error);
});