uni-app uni.getUserInfo(OBJECT)获取QQ信息时昵称等出现乱码
uni-app uni.getUserInfo(OBJECT)获取QQ信息时昵称等出现乱码
操作步骤:
uni.login({
provider: "qq",
success: (res) => {
console.log(res, "第一个参数");
uni.getUserInfo({
provider: "qq",
success: (res1) => {
console.log(res1, "第二个参数");
}
})
}
})
### 预期结果:
```json
{
"errMsg": "getUserInfo:ok",
"userInfo": {
"ret": 0,
"msg": "",
"is_lost": 0,
"nickname": "♞凭栏听雨",
"gender": "女",
"gender_type": 1,
"province": "北京",
"city": "东城",
"year": "2019",
"constellation": "",
"figureurl": "http://qzapp.qlogo.cn/qzapp/1104455702/E0BC75407C54AB4EBD10B86F30385573/30",
"figureurl_1": "http://qzapp.qlogo.cn/qzapp/1104455702/E0BC75407C54AB4EBD10B86F30385573/50",
"figureurl_2": "http://qzapp.qlogo.cn/qzapp/1104455702/E0BC75407C54AB4EBD10B86F30385573/100",
"figureurl_qq_1": "http://thirdqq.qlogo.cn/g?b=oidb&k=2xOLEAaQAQWOppfdPYMGOA&s=40&t=1560659149",
"figureurl_qq_2": "http://thirdqq.qlogo.cn/g?b=oidb&k=2xOLEAaQAQWOppfdPYMGOA&s=100&t=1560659149",
"figureurl_qq": "http://thirdqq.qlogo.cn/g?b=oidb&k=2xOLEAaQAQWOppfdPYMGOA&s=640&t=1560659149",
"figureurl_type": "1",
"is_yellow_vip": "0",
"vip": "0",
"yellow_vip_level": "0",
"level": "0",
"is_yellow_year_vip": "0",
"nickName": "♞凭栏听雨",
"avatarUrl": "http://qzapp.qlogo.cn/qzapp/1104455702/E0BC75407C54AB4EBD10B86F30385573/30"
}
}
实际结果:
更多关于uni-app uni.getUserInfo(OBJECT)获取QQ信息时昵称等出现乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
6 回复
同样的问题,无解
更多关于uni-app uni.getUserInfo(OBJECT)获取QQ信息时昵称等出现乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
HX 3.1.7和3.1.8测试均未复现。请补充下详细的设备信息,多测几个设备看下,是否存在此问题
华为mate30同样的乱码,最新版本hbuilderx
问题已复现,后续优化,已加分,感谢您的反馈!
bug 已确认。 三字节UTF8字符 在小概率场景出现此问题。 稍后版本修复
这是一个常见的字符编码问题。QQ昵称中的特殊字符(如♞)在返回数据时可能出现乱码,主要是由于编码格式不一致导致的。
解决方案:
- 使用decodeURIComponent解码:
uni.getUserInfo({
provider: "qq",
success: (res1) => {
const decodedNickname = decodeURIComponent(res1.userInfo.nickname);
console.log(decodedNickname); // 正常显示"♞凭栏听雨"
}
})
-
检查服务器响应头编码: 确保QQ开放平台返回的数据编码为UTF-8格式。
-
处理特殊字符: 如果仍有问题,可以使用TextDecoder处理:
const decoder = new TextDecoder('utf-8');
const decodedString = decoder.decode(new Uint8Array(encodedData));
- 统一编码格式: 在应用manifest.json中确认已配置UTF-8编码:
{
"name": "your-app",
"appid": "",
"description": "",
"versionName": "1.0.0",
"versionCode": "100",
"transformPx": false,
"app-plus": {
"usingComponents": true
}
}