我正在尝试将 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')
你会看到一个空的缓冲区。
Also, '00 48 00 65 00 6C 00 6C 00 6F 00 20 4E 16 75 4C'
不是“Hello World”的 UTF-16 十六进制表示。当编码为字符串时,它是这样的:䠀攀氀氀漀 ᙎ䱵。48 00 65 00 6c 00 6c 00 6f 00 20 00 16 4e 4c 75
UTF-16 十六进制格式的“Hello World”是我通过运行得到的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 世界
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)