无需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
相关产品推荐
相关产品推荐

