【问题标题】:How can convert a arraybuffer response type to string in python?如何在python中将arraybuffer响应类型转换为字符串?
【发布时间】:2021-05-29 03:35:09
【问题描述】:

我有 API 服务器,可以响应 arraybuffer 格式的任何请求。 此 API Web 服务器在 Java 脚本中正常工作,如下所示:

xhrOverride.responseType = 'arraybuffer';
request = $.ajax({
url: url,
method: 'GET'
        .
        .
        .

request .done(function(data) {
                mydata = {
                    buffer: data,
                };
                myconverter(mydata );
            }
                .
                .
                .


function myconverter(data) {
    const buffer = data.buffer;
    let vals = new Uint32Array(data.buffer, 0, 5);
    data.n = vals[0] / 1000 + vals[1] ;
    let stride = vals[2];
    data.x= vals[3];
    let limits = new Int16Array(buffer, 20, 4);
    data.city= limits[0];
    data.united= limits[1];
    data.vil= limits[2];
  .
  .
  .

以上代码在Java Script中可以正常工作,但在Python中不能正常工作,如下所示:

response = requests.get(url)
print(response.text) 

输出:

��7DT�z !��?���{_s:x�0�Ɗ���$����Fp�@�Uk�K�u�jq,���k�,v��Z�j�...

我将响应转换为 base64,然后将 base64 转换为 UTF-8,但我的回答还是:

��7DT�z !��?���{_s:x�0�Ɗ���$����Fp�@�Uk�K�u�jq,���k�,v��Z�j�...

如何将响应转换为真实字符串?

【问题讨论】:

    标签: javascript python request arraybuffer


    【解决方案1】:

    考虑将ArrayBuffer 发送/解析为字符串。这是 JS 工具,也许 Python 中的类似工具就足够了?

    class ArrayBufferUtil {
      static toString(buffer) {
        return new Uint8Array(buffer).toString()
      }
      
      static parse(s) {
        return new Uint8Array(
          s.split(',').map(i => parseInt(i, 10))
        ).buffer
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2013-10-16
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      相关资源
      最近更新 更多