Lenny1685964109 2024-06-06 14:10 采纳率: 0%
浏览 60

EasyWeChat6.x生成小程序码, JSON 数据时遇到了非法的 UTF-8 字符序列

使用easywechat6.x版本示例,报错:Malformed UTF-8 characters, possibly incorrectly encoded,代码如下


  public function getWxQrcodePath(): Response
    {
        try {
            $api = $this->app->getClient();
            $response = $api->postJson('wxa/getwxacodeunlimit', [
                    'scene' => 123,
                    'page' => 'pages/index/index',
                    'width' => 430,
                ]);
            $path = $response->saveAs('path/to/file.jpg');
            return $this->success('获取成功',$path);
        }catch(\Throwable $e){
            return $this->error($e->getMessage());
        }
    }
// 尝试内容转换成流返回保存时,错误信息为Call to a member function saveAs() on resource
 public function getWxQrcodePath(): Response
    {
        try {
            $api = $this->app->getClient();
            $response = $api->postJson('wxa/getwxacodeunlimit', [
                    'scene' => 123,
                    'page' => 'pages/index/index',
                    'width' => 430,
                ])->toStream();
            $path = $response->saveAs('path/to/file.jpg');
            return $this->success('获取成功',$path);
        }catch(\Throwable $e){
            return $this->error($e->getMessage());
        }
    }

问题如何解决

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-06 14:10
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在使用EasyWeChat6.x生成小程序码时遇到的问题,可以从以下几个方面来解决:

    解决非法的UTF-8字符序列问题

    1. 检查数据编码:确保所有发送到微信服务器的数据都是UTF-8编码。这包括scenepage和其他任何传递给API的数据。

    2. 检查响应处理:如果微信服务器响应的数据不是UTF-8编码,那么在处理这些数据时可能会出现问题。确保在处理响应之前,将响应内容转换为UTF-8编码。

    修复saveAs()方法调用错误

    在EasyWeChat中,saveAs()方法应该用于Response对象,而不是资源。从你提供的代码来看,你在调用toStream()之后尝试调用saveAs(),这是不正确的,因为toStream()返回的是一个资源,而不是Response对象。

    要解决这个问题,你应该在调用toStream()之前保存响应内容,或者使用其他方式来处理流。

    代码示例

    以下是修改后的代码示例,它应该可以解决你遇到的问题:

    public function getWxQrcodePath(): Response
    {
        try {
            $api = $this->app->getClient();
            $response = $api->postJson('wxa/getwxacodeunlimit', [
                'scene' => 123,
                'page' => 'pages/index/index',
                'width' => 430,
            ]);
    
            // 确保响应内容是UTF-8编码
            $content = mb_convert_encoding($response->getBody()->getContents(), 'UTF-8', 'UTF-8');
    
            // 将内容保存为文件
            file_put_contents('path/to/file.jpg', $content);
    
            return $this->success('获取成功', 'path/to/file.jpg');
        } catch(\Throwable $e) {
            return $this->error($e->getMessage());
        }
    }
    

    参考资料

    请根据你的具体环境和需求,调整上述代码示例。如果问题仍然存在,建议查看EasyWeChat的GitHub仓库中的issue或者寻求社区的帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月6日

悬赏问题

  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并