You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中含特殊字符的HTML转Base64出现乱码的解决方法

解决HTML文件转Base64时的乱码问题

问题根源

你当前的代码存在两个关键问题:

  • 错误地将文件路径字符串而非文件实际内容转成了Base64(从代码new Buffer.from(req.file.path, 'utf8')可以看出,req.file.path是文件的路径字符串,不是文件的二进制内容);
  • 即使读取了文件内容,若先以utf8编码转换为字符串再生成Buffer,会破坏原始二进制结构——特殊字符或非utf8兼容字节会被替换为�,最终导致Base64转回HTML时乱码。

在线工具之所以能正确处理,是因为它直接基于文件的原始二进制数据进行Base64编码,没有经过字符串编码的中间环节。

正确实现方式

根据你的文件获取方式,选择以下对应方案:

方案1:通过文件路径读取文件(使用fs模块)

直接读取文件的二进制数据,无需指定编码,再转Base64:

const fs = require('fs');
// 读取文件原始二进制内容
const fileBuffer = fs.readFileSync(req.file.path);
// 转换为Base64字符串
const base64File = fileBuffer.toString('base64');

方案2:使用上传中间件(如multer)的内置buffer

若你用multer等工具处理文件上传,req.file.buffer已经是文件的原始二进制Buffer,直接转Base64即可:

const base64File = req.file.buffer.toString('base64');

核心原理

Base64是对二进制数据的编码格式,必须基于文件的原始字节流处理。任何先将二进制转成带编码的字符串的操作,都会破坏原始字节结构,导致特殊字符、非utf8编码内容丢失或损坏。直接使用二进制Buffer转Base64,才能保证编码后的字符串可以完整还原为原始HTML文件。

内容的提问来源于stack exchange,提问作者Việt Hoàng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:55:18