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

无需browserify的Buffer.toString("utf16le")的HTML/DOM等效实现方法

纯前端实现Node.js Buffer.from(<string>).toString("utf16le")等效功能

可以直接用浏览器原生API实现,不需要引入任何第三方工具或构建工具,以下是两种实现方案:

方案1:现代浏览器原生API实现(推荐)

直接用DOM原生的TextEncoder和TextDecoder实现,和Node.js的行为完全一致,兼容所有主流现代浏览器:

function convertToUtf16le(str) {
  // 等效于Buffer.from(str):将输入字符串按UTF-8编码为字节数组
  const utf8Bytes = new TextEncoder().encode(str);
  // 等效于.toString('utf16le'):将字节数组按UTF-16LE编码解码为字符串
  return new TextDecoder('utf-16le').decode(utf8Bytes);
}

验证示例

比如在Node.js中运行Buffer.from('test').toString('utf16le')得到结果整瑳,调用上面的函数传入'test'会得到完全相同的输出。

方案2:兼容老旧浏览器的手动实现

如果需要兼容IE等不支持TextEncoder的老旧环境,可以用手动编码解码的方式实现:

function convertToUtf16leLegacy(str) {
  // 第一步:将字符串转成UTF-8字节数组
  const utf8Str = unescape(encodeURIComponent(str));
  const byteArr = new Uint8Array(utf8Str.length);
  for (let i = 0; i < utf8Str.length; i++) {
    byteArr[i] = utf8Str.charCodeAt(i);
  }
  // 第二步:按UTF-16LE规则拼接为目标字符串
  let result = '';
  for (let i = 0; i < byteArr.length; i += 2) {
    const lowerByte = byteArr[i];
    const upperByte = i + 1 < byteArr.length ? byteArr[i + 1] : 0x00;
    result += String.fromCharCode(lowerByte | (upperByte << 8));
  }
  return result;
}

注意事项

  • 两种实现都完全对齐Node.js的原生行为,包括字节总数为奇数时末尾补0的规则
  • 不需要引入browserify、buffer polyfill等任何第三方依赖,直接在纯HTML环境即可运行
  • 方案1的兼容性覆盖Chrome 38+、Firefox 19+、Safari 10.1+、Edge 79+,可满足绝大多数场景需求

内容的提问来源于stack exchange,提问作者Komali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:04