9

In Python 3, I can do this:

>>> "€13,56".encode('utf-16')
b'\xff\xfe\xac 1\x003\x00,\x005\x006\x00'

The input is a (unicode) string, while the output is a sequence of raw bytes of that string encoded in utf-16.

How can I do the same in JavaScript - go from a (unicode) string, to a sequence of raw bytes (perhaps as a Uint8Array?) of that string encoded in utf-16?

Claudiu
  • 224,032
  • 165
  • 485
  • 680
  • 1
    Possible duplicate of [How to convert a String to Bytearray](http://stackoverflow.com/questions/6226189/how-to-convert-a-string-to-bytearray) – phuzi Jun 02 '16 at 16:00

4 Answers4

13

Do you want this?

function strEncodeUTF16(str) {
  var buf = new ArrayBuffer(str.length*2);
  var bufView = new Uint16Array(buf);
  for (var i=0, strLen=str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return bufView;
}

var arr = strEncodeUTF16('€13,56');

Taken from Google Developers

shilch
  • 1,435
  • 10
  • 17
  • I used this to convert a utf8 string (nodejs's default encoding in most cases), into utf16 string (which is the type of default encoding for javascript strings). – Clifford Fajardo Feb 28 '20 at 23:51
2
function strEncodeUTF16(str) {
  var arr = []
  for (var i = 0; i < str.length; i++) {
    arr[i] = str.charCodeAt(i)
  }
  return arr
}


var arr = strEncodeUTF16('€13,56');

console.log(arr)
alsotang
  • 1,520
  • 1
  • 13
  • 15
1

I needed to convert a utf8 encoded string to a hexadecimal utf-16 string:

function dec2hex(dec, padding){
  return parseInt(dec, 10).toString(16).padStart(padding, '0');
}

function utf8StringToUtf16String(str) {
  var utf16 = [];
  for (var i=0, strLen=str.length; i < strLen; i++) {
    utf16.push(dec2hex(str.charCodeAt(i), 4));
  }
  return utf16.join();
}
Gavriel
  • 18,880
  • 12
  • 68
  • 105
0

To get Uint8Array, use this code

inspired by shilch's Answer

change return bufView to return new Uint8Array(buf)


function strEncodeUTF16(str) {
    var buf = new ArrayBuffer(str.length * 2);
    var bufView = new Uint16Array(buf);
    for (var i = 0, strLen = str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return new Uint8Array(buf);
}

var arr = strEncodeUTF16('€13,56');
mgcation
  • 517
  • 6
  • 17