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


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Lenny1685964109 2024-06-06 14:10 采纳率: 0% 浏览 14 首页/ 编程语言 / EasyWeChat6.x生成小程序码, JSON 数据时遇到了非法的 UTF-8 字符序列 php小程序 使用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()); } } 问题如何解决 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    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或者寻求社区的帮助。

      展开全部

      评论 编辑记录
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-06 14:10
      关注

      引自免费微信小程序:皆我百晓生

      根据您提供的代码,看起来您在尝试使用 EasyWechat 的 6.x 版本来生成微信小程序码(WXACode)。错误提示 Malformed UTF-8 characters, possibly incorrectly encoded 表明发送到微信服务器的数据中可能存在不正确的编码格式。这通常是因为字符串数据没有正确地被转换为 UTF-8 格式。

      首先,我们需要确保所有传递给 postJson 方法的数据都是正确的 UTF-8 编码。这里主要关注的是 'page' 参数,因为它可能是动态生成的,并可能包含非标准的字符。您可以尝试将页面路径强制转换为 UTF-8,如下所示:

      app->getClient();
              $response = $api->postJson('wxa/getwxacodeunlimit', [
                  'scene' => 123,
                  'page' => $page,
                  'width' => 430,
              ]);
      
              // 如果使用 toStream 方式,需要先读取内容再保存
              $content = (string) $response->getBody(); 
              $stream = fopen('path/to/file.jpg', 'wb'); 
              fwrite($stream, $content); 
              fclose($stream);
      
              return $this->success('获取成功', 'path/to/file.jpg');
          } catch (\Throwable $e) {
              return $this->error($e->getMessage());
          }
      }
      

      这段代码做了几个改动:

      1. 使用 mb_convert_encoding 函数将 'pages/index/index' 转换为 UTF-8 编码。
      2. 更改了保存文件的部分,因为 toStream() 返回的是一个 Stream 对象,所以我们需要先将其内容转换为字符串,然后写入文件。

      这样应该可以解决您的问题。如果还有其他错误或疑问,请随时告诉我。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    一、八大排序(sort)
    “一种三元前驱体废水螯合树脂回收钴的装置”实用新型专利
    数据传输如何做才安全:保障隐私的5大秘诀!
    基于支持向量机的试剂条图像识别,基于SVM的图像识别,SVM的详细原理,Libsvm工具箱使用注意事项
    静态HTML个人音乐网页 大学生网页设计作业 简单音乐娱乐网页制作 DW个人网站模板下载 大学生简单音乐网页作品代码
    linux下的GPU压力测试
    JUC学习笔记——并发工具线程池
    照片批量处理 7000张
    交易用户如何去使用l2行情数据api接口?
    1024 云上见 · 上云挑战(ChatGPT搭建)
  • 原文地址:https://ask.csdn.net/questions/8114928