UTF-16十六进制解码节点JS
我正在尝试将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 世界
希望这能有所帮助!
相关文章