PHP中SOAP请求返回的base64Binary类型CSV转可读格式求助
解决方法:你的"损坏CSV"其实是ZIP压缩包!
嘿,我一眼就认出你输出的乱码开头是PK——这是ZIP压缩文件的标志性文件头!你拿到的不是直接的CSV内容,而是被打包成ZIP后再用base64编码的二进制数据,直接打印自然会显示乱码。下面是具体的解决步骤(从你给出的stdClass Object判断你用的是PHP,所以给出PHP实现):
具体实现步骤
- 第一步:对
errorReport字段做base64解码,得到ZIP格式的二进制数据 - 第二步:将二进制数据写入临时ZIP文件
- 第三步:解压ZIP文件,读取里面的CSV内容
示例代码
// 假设你的SOAP返回对象是$soapResponse $zipBase64Data = $soapResponse->errorReport; // 1. 解码base64,获取ZIP二进制数据 $zipBinary = base64_decode($zipBase64Data); if (!$zipBinary) { die("base64解码失败,请确认输入数据是否有效"); } // 2. 创建临时ZIP文件并写入数据 $tempZipFile = tempnam(sys_get_temp_dir(), 'error_report') . '.zip'; file_put_contents($tempZipFile, $zipBinary); // 3. 解压并读取CSV内容 $zip = new ZipArchive(); if ($zip->open($tempZipFile) === true) { // 根据你看到的文件名,读取ErrorsReport_NEW.csv $csvContent = $zip->getFromName('ErrorsReport_NEW.csv'); if ($csvContent) { // 现在可以正常打印或处理CSV内容了 echo $csvContent; // 如果要保存到本地文件: // file_put_contents('ErrorsReport_NEW.csv', $csvContent); } else { echo "ZIP包中未找到ErrorsReport_NEW.csv文件"; } $zip->close(); } else { echo "无法打开ZIP文件,可能是解码后的数据损坏"; } // 清理临时文件 unlink($tempZipFile);
为什么之前的方法没用?
你之前直接用base64_decode后尝试读取,得到的是ZIP的二进制字节流,不是纯文本CSV,所以直接打印会显示乱码。必须通过ZIP解压工具(PHP的ZipArchive扩展)来提取里面的CSV文件才能得到可读内容。
内容的提问来源于stack exchange,提问作者Atul
相关产品推荐
相关产品推荐

