无双的英雄
无双的英雄
  • 发布:2025-11-05 22:58
  • 更新:2025-11-09 00:13
  • 阅读:105

【报Bug】HarmonyOS NEXT 微信分享无法使用包含中文编码的图片url

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 专业版

HBuilderX版本号: 4.84

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS 5.1.1

手机厂商: 华为

手机机型: MatePad11.5s

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: CLI

CLI版本号: 3.0.0-4080420251103001

示例代码:
// 无法工作  
uni.share({  
    "title": "title",  
    "summary": "summary",  
    "provider": "weixin",  
    "scene": "WXSceneSession",  
    "type": 0,  
  // 或者 https://example.com/图片.jpg  
    "imageUrl": "https://example.com/%E5%9B%BE%E7%89%87.jpg",  
    "href": "https://example.com/some"  
})  

uni.share({  
    "provider": "weixin",  
    "scene": "WXSceneSession",  
    "type": 2,  
  // 或者 https://example.com/图片.jpg  
    "imageUrl": "https://example.com/%E5%9B%BE%E7%89%87.jpg",  
})

将同一份图片重名为为英文上传至服务器获得纯英文路径的url

// 正常工作  
uni.share({  
    "title": "title",  
    "summary": "summary",  
    "provider": "weixin",  
    "scene": "WXSceneSession",  
    "type": 0,  
    "imageUrl": "https://example.com/photo.jpg",  
    "href": "https://example.com/some"  
})  

uni.share({  
    "provider": "weixin",  
    "scene": "WXSceneSession",  
    "type": 2,  
    "imageUrl": "https://example.com/photo.jpg",  
})

操作步骤:

示例中文url:
https://example.com/图片.jpg
https://example.com/%E5%9B%BE%E7%89%87.jpg

使用类似示例的中文url作为imageUrl参数的进行微信图文分享或者图片分享即可复现。

基于安全考虑不提供真实url,以上url仅供参考,请使用自己的文件服务器上传测试。

预期结果:

应该与安卓、iOS平台一样正常分享。

实际结果:

分享时APP端没有反应,控制台此时的输出日志为:

[wxopensdk::WXApi] sendReq, use link
[wxopensdk::WXApi] openWeChatWithLink fail by err: Internal error.

bug描述:

使用包含中文或者中文编码字符图片链接无法发起微信分享。

但如果使用纯英文路径的同一图片文件url时,可以正常分享,基本可以排除微信SDK配置问题、网络问题、系统问题、文件格式问题。

补充说明:使用上述示例中文url调用 uni.requestuni.download 方法去请求是可以正常获得响应的;安卓、iOS平台分享没有问题。uniapp-x也存在此问题,已提交反馈 https://issues.dcloud.net.cn/pages/issues/detail?id=23030

2025-11-05 22:58 负责人:无 分享
已邀请:
DCloud_UNI_yuhe

DCloud_UNI_yuhe

hello,这是鸿蒙平台的限制,请不要使用中文字符

  • 无双的英雄 (作者)

    并非平台限制,这个url可以正常显示和下载的。

    而且我自己参考市场插件代码编写UTS代码调用微信分享API可以实现微信分享的


    const getImg = async (url : string) : Promise<ArrayBuffer> => {  
    return new Promise<ArrayBuffer>((resolve, reject) => {
    uni.request({
    url,
    responseType: 'arraybuffer',
    success: (res) => {
    resolve(res.data as ArrayBuffer);
    },
    fail: (err) => {
    reject(err);
    },
    });
    });
    }

    export const wxShareImg = async (imageUrl : string) => {
    try {
    let imageObject = new wxopensdk.WXImageObject

    let buf = buffer.from(await getImg(imageUrl));
    imageObject.imageData = buf.toString('base64', 0, buf.length);

    let mediaMessage = new wxopensdk.WXMediaMessage()
    mediaMessage.mediaObject = imageObject

    const req = new wxopensdk.SendMessageToWXReq()
    req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
    req.message = mediaMessage

    try {
    await WXApi.sendReq(getContext() as common.UIAbilityContext, req)
    } catch (error) {
    return false;
    }
    return true;
    } catch (error) {
    return false;
    }
    }

    2025-11-07 00:51

  • 无双的英雄 (作者)

    反正我知道微信分享SDK是不能直接分享网络地址需要下载下来转成base64作为参数发,我估计是你们底层实现这个下载方法有问题。

    2025-11-07 00:53

无双的英雄

无双的英雄 (作者)

经过多次尝试发现是分享图片失败是体积问题,社区也有类似讨论:https://developer.huawei.com/consumer/cn/forum/topic/0201191503860756974

要回复问题请先登录注册