UTF-16十六进制解码节点JS

2022-06-29 00:00:00 node.js encoding buffer javascript

我正在尝试将UTF-16十六进制(Hello世界)解码为NodeJS中的字符串。我曾尝试通过从十六进制创建缓冲区来完成此操作:

let vari = new Buffer.from('00 48 00 65 00 6C 00 6C 00 6F 00 20 4E 16 75 4C', 'hex').toString();

但当我通过控制台记录‘vari’时,我得不到任何/正确的结果。我尝试将‘utf8’和‘utf16le’传递给toString方法,但似乎也不起作用。有谁能给我指个方向吗?


解决方案

它不起作用,因为您正在使用字符串形式的缓冲区表示创建一个新缓冲区。这将导致缓冲区,然后在解码时,将是缓冲区的字符串'00 48 00 65 00 6C 00 6C 00 6F 00 20 4E 16 75 4C',但由于hex缓冲区将为空。如果您要console.log(Buffer.from('00 48 00 65 00 6C 00 6C 00 6F 00 20 4E 16 75 4C', 'hex'),您将看到一个空缓冲区。

此外,'00 48 00 65 00 6C 00 6C 00 6F 00 20 4E 16 75 4C'不是"Hello世界"的UTF-16十六进制表示。当编码为字符串时,它是这样的:䠀攀氀氀漀 ᙎ䱵。 48 00 65 00 6c 00 6c 00 6f 00 20 00 16 4e 4c 75是Utf-16十六进制格式的"Hello世界",这是我在运行console.log(Buffer.from('Hello 世界', 'utf16le'));时得到的。

要回答有关如何将'48 00 65 00 6c 00 6c 00 6f 00 20 00 16 4e 4c 75'转换回"Hello世界"的问题,您可以执行以下操作:

let hexStrings = '48 00 65 00 6c 00 6c 00 6f 00 20 00 16 4e 4c 75'.split(' '); // split string chunks
let hex = hexStrings.map(x => parseInt(x, 16)); // convert string chunks to hexadecimal
let buffer = Buffer.from(hex); // create buffer from hexadecimal array
let string = buffer.toString('utf16le'); // convert buffer to string
console.log(string); // output -> Hello 世界

希望这能有所帮助!

相关文章