调用blob.text()与FileReader均返回Buffer而非字符串问题求助
解决方案
首先明确:标准浏览器环境下Blob.text()返回的是Promise<string>,如果返回Buffer,90%以上的概率是你在Node.js环境使用了兼容类Blob实现(如node-fetch、undici包提供的Blob),不同场景的处理方案如下:
Node.js环境处理
Node.js端的Blob实现未完全对齐W3C标准,Blob.text()返回Promise<Buffer>属于预期行为,直接调用Buffer的toString()方法即可得到字符串:
// 已获取到Blob对象 blob const buffer = await blob.text(); // 指定编码转换为字符串,默认是utf-8,可根据实际编码调整 const jsonString = buffer.toString('utf8'); // 如需直接转为JSON对象,可直接解析 const result = JSON.parse(jsonString);
优化建议:如果是通过fetch发起的请求,无需手动转Blob,直接调用响应对象的方法更高效:
const response = await fetch('your-api-url'); // 直接获取文本字符串 const jsonString = await response.text(); // 或直接解析为JSON对象 const result = await response.json();
浏览器环境处理
如果是浏览器环境出现该问题,按以下步骤排查处理:
- 先验证Blob有效性:打印
blob.size,如果值为0说明请求返回空内容,和转换逻辑无关 - 显式指定编码使用FileReader转换:
const reader = new FileReader(); reader.onload = function(e) { const jsonString = e.target.result; // 后续业务处理 }; // 显式指定UTF-8编码,避免响应头编码配置错误导致的乱码/类型异常 reader.readAsText(blob, 'utf-8');
内容的提问来源于stack exchange,提问作者ed4becky
相关产品推荐
相关产品推荐

