如何在Logic Apps中将application/octet-stream内容转换为CSV文件
D365导出CSV接口返回内容乱码解决方案
调用D365 HTTP导出接口下载CSV时,返回二进制格式报文示例如下:
{ "$content-type": "application/octet-stream", "$content": "UEsDBBQAAAAIAL07VFMaQk8xFQcAAEkXAAAZAAAAQVZBVmV" }
直接解码$content字段会得到乱码,无法获取正常CSV文件。
问题相关截图:
根因分析
$content字段存储的是Base64编码的完整二进制文件流,不是纯文本CSV内容- 从
$content前缀UEsDBBQ可以判定,该二进制流是ZIP压缩包(对应ZIP文件二进制头PK\x03\x04的Base64编码结果),D365导出接口默认会将CSV打包为ZIP返回,直接转字符串必然乱码
已尝试代码错误点
你之前的写法存在逻辑错误:
base64ToString直接将ZIP二进制流转为字符串,压缩包二进制不属于可识别文本编码格式,转换结果自然乱码- 后续调用
json()解析完全多余,目标结果是CSV文件,不是JSON结构数据 @string()直接输出Base64编码原文,没有做二进制解码操作
正确处理流程
Power Automate 场景(从你使用的表达式语法判定)
- 提取
$content字段值:body('Download_the_package_file')['$content'] - 转换为二进制流:使用表达式
base64ToBinary(<上一步的Base64内容>) - 解压获取CSV:将上一步得到的二进制流传入「提取存档」操作,解压后即可得到正常的CSV文件
通用代码场景(以Python为例)
import base64 import zipfile from io import BytesIO # 接口返回的JSON结果 resp_json = { "$content-type": "application/octet-stream", "$content": "UEsDBBQAAAAIAL07VFMaQk8xFQcAAEkXAAAZAAAAQVZBVmV" } # 1. 解码Base64得到ZIP二进制流 zip_bytes = base64.b64decode(resp_json["$content"]) # 2. 解压ZIP提取CSV内容 with zipfile.ZipFile(BytesIO(zip_bytes)) as zip_f: # 读取压缩包内第一个文件(默认就是导出的CSV) csv_file_name = zip_f.namelist()[0] csv_text = zip_f.read(csv_file_name).decode("utf-8") # 后续可直接处理csv_text或者写入本地文件
内容的提问来源于stack exchange,提问作者Lathik Kumar N
相关产品推荐
相关产品推荐

