Excel文件解码异常:REST API上传.xls文件Base64转码出现乱码
根因说明
你犯的核心错误是把二进制文件字节数组强行做了UTF-8文本转码。Base64解码后的结果本身就是Excel文件的原始二进制字节,根本不是UTF-8编码的文本,两次转码(字节→UTF-8字符串→字节)会把无法识别为UTF-8字符的二进制位直接替换为乱码占位符,彻底破坏原始文件数据。你输出的乱码开头的PK!是ZIP压缩包的文件头标识,也能验证解码后的数据本来就是二进制压缩包(.xlsx格式本质就是ZIP打包的XML文件集合)。
修复方案
直接用Base64解码得到的字节数组构造输入流即可,不需要多余的转码操作:
byte[] excelRawBytes = Base64.getDecoder().decode(fileContentEncoded); InputStream fileContent = new ByteArrayInputStream(excelRawBytes);
后续如果需要解析Excel内容,直接把这个输入流传给POI等Excel处理工具就行:
// 读取xlsx文件示例 XSSFWorkbook workbook = new XSSFWorkbook(fileContent); // 读取旧版.xls文件可以换用HSSFWorkbook
额外排查注意项
- 确认你拆分请求内容拿Base64串的逻辑没有问题,不要把分隔符、请求头字段等多余内容带到
fileContentEncoded里,否则会导致Base64解码失败。 - 确认上传端的Base64编码逻辑是直接读取文件二进制字节做的编码,没有额外做字符转码。
内容的提问来源于stack exchange,提问作者michaelpnrs
相关产品推荐
相关产品推荐

