UTF-16 Hex Decode NodeJS - PullRequest
       30

UTF-16 Hex Decode NodeJS

1 голос
/ 29 апреля 2020

Я пытаюсь декодировать шестнадцатеричный код 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, но, похоже, он тоже не работает. Кто-нибудь может указать мне правильное направление?

1 Ответ

1 голос
/ 29 апреля 2020

Это не работает, потому что вы создаете новый буфер из представления буфера в виде строки. Это приведет к буферу, тогда при декодировании будет строка буфера '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' не является шестнадцатеричным представлением UTF-16 для «Hello 世界». когда кодируется как строка, это:: 攀 氀 氀 漀 ᙎ 䱵. 48 00 65 00 6c 00 6c 00 6f 00 20 00 16 4e 4c 75 - это «Привет 世界» в гексах UTF-16, я получил это от запуска console.log(Buffer.from('Hello 世界', 'utf16le'));.

Чтобы ответить на вопрос о том, как вы можете преобразовать '48 00 65 00 6c 00 6c 00 6f 00 20 00 16 4e 4c 75' обратно в «Привет 世界», вы можете сделать следующее:

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 世界

Надеюсь, это поможет!

...