收藏
回答

wx.request res.data里的数据和实际数据不同

问题模块
API和组件

使用wx.request 获取服务器上的一个.bin文件。

但是request直接将.bin文件转换为了string  并且string长度和源文件大小不同 请问是什么问题?需要进行别的设置吗?

请求头设置:

  1. Content-Type:

    application/octet-stream


最后一次编辑于  2017-05-16  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

7 个回答

  • maq
    maq
    2017-05-16

    首先,js 并不是 binary-friendly 的,在 js 中处理二进制数据一向是比较困难的,需要特殊支持。


    很好奇你为什么要把一个 .bin 文件传到 js 里,接下来要做什么……


    必要的话,可以考虑在服务器端对二进制内容进行 base64 编码,然后在小程序端用 wx.base64ToArrayBuffer() 解码。

    2017-05-16
    赞同
    回复
  • 胖花生
    胖花生
    2017-05-16

    @maq

    感谢你的建议。

    如果我可以通过request方式获取一个.bin文件的buffer或者内容 哪我可以通过ble接口进行升级 。

    通过console 看到request接口其实已经将整个.bin文件接收但是不知道微信做了什么处理将内容转换为了string  导致内容长度与原文见内容长度不一致

    2017-05-16
    赞同
    回复
  • maq
    maq
    2017-05-16

    wx.request() 只会把收到的内容理解为“字符串”(也许还会进一步当做 json 来解析),而且它会假设你发送的内容是 UTF-8 编码的,而事实上你的 .bin 文件不会符合这个预期,所以“转换为字符串”的过程中会出现乱码,长度当然也就变了。


    你可以在服务器端先用 base64 编码,到了小程序里再解码。

    2017-05-16
    赞同
    回复
  • 欣✨
    欣✨
    2017-07-27

    遇到同样的问题,请求数据为二进制码时,ios真机直接无法收到任何数据,errMsg:requeat:fail response data convert to UTF8 fail,安卓和工具上则显示string长度与原始数据有差异,咨询官方是否可以修复这个bug,急!

    2017-07-27
    赞同
    回复
  • maq
    maq
    2017-07-27

    你的服务器输出了错误格式的内容,让官方修复什么 BUG?

    2017-07-27
    赞同
    回复
  • 欣✨
    欣✨
    2017-07-27

    服务器端返回的Content-Type:"application/octet-stream"是正确的,微信错误的把结果中的data强制转成了string

    2017-07-27
    赞同
    回复
  • maq
    maq
    2017-07-28

    如果不转换成 string,你觉得它应该是个什么东西呢?ByteBuf?

    2017-07-28
    赞同
    回复