arrays - 在 Google Apps 脚本中处理使用 UrlFetchApp 检索到的二进制数据
问题描述
我正在尝试通过他们的网络服务器处理从戴维斯气象站检索到的二进制数据。
我使用附加到 Google Apps 电子表格的脚本来执行此操作。
var lResponse = UrlFetchApp.fetch(lWLDataUrl);
var lContentBytes = lResponse.getAs('application/octet-stream').getBytes();
Weatherlink 返回的数据由 52 字节长的记录组成,因此我使用以下方法在循环中对它们进行切片:
var lContentObject = {};
for (var li=1; li<=lNumberOfRecords; li++) {
var lBinaryData = lContentBytes.slice((li-1)*52, (li-1)*52+52);
lContentObject[li] = {"binary_data": lBinaryData};
}
但结果不是我所期望的。我很难说服务器是否返回了错误的数据(不太可能),或者我没有正确处理它(可能)。我应该能够将响应转换为无符号 8 位整数数组,并将它们解码为如下所示的天气数据记录:
2015/01/01;00:30;-1,9;-1,9;-2,0;92;-3,1;1,6;W;0,80;4,8;W;-1,9;-2,1;-2,1;1031,5;0,00;0,0;0,422;0,000;18,7;42;5,5;17,4;8,14;1,2209;M;M;M;M;M;M;M;M;M;-0,6;-1,1;M;M;4;0;-0,6;-1,1;698;1;100,0;30
相反,检索到的数据lContentBytes
在调试器中显示为负数,尽管情况并非如此。尽管返回的字节数组的总大小与我的预期相对应(记录数 * 52),但从字节数组中“切片”的最后一条记录填充了“-1”,情况不应该如此。
我做了很多研究,但没有找到任何解决方案...
以下是对 GET 请求的响应的标头:
- '内容传输编码':“二进制”,
- 连接:“保持活动”,
- '内容编码':"gzip",
- 变化:“接受编码”,
- '内容长度':“161”,
- 日期:“格林威治标准时间 2020 年 4 月 15 日,星期三 20:29:13”,
- “内容类型”:“应用程序/八位字节流”
解决方案
推荐阅读
- c# - ASP.NET MVC Core - 将表单发布到类参数
- ms-access - 如何使用 Microsoft Access 表达式生成器编写计算字段?
- laravel - Laravel Spatie 权限 - 用户和角色关系仅获取 id 和 name
- flutter - Flutter Firestore 将 Stream 转换为 Future
- java - 在这里遇到 java.lang.NullPointerException
- pandas - Python中的KeyError'
- javascript - 在 React.js 中单击鼠标连续递增计数器
- flutter - 在颤动中控制 listview.builder 中文本字段的滚动
- c# - 如何以编程方式单击 MessageBox 上的按钮
- html - 如何在 nextjs 中添加自定义 Css