如何在JavaScript中将字符串编码为utf-16?

9
在Python 3中,我可以这样做:
>>> "€13,56".encode('utf-16')
b'\xff\xfe\xac 1\x003\x00,\x005\x006\x00'

输入是一个(Unicode)字符串,输出是该字符串编码为UTF-16的原始字节序列。

如何在JavaScript中实现相同的功能 - 从(Unicode)字符串转换为该字符串编码为UTF-16的原始字节序列(可能作为Uint8Array?)?


1
可能是重复的问题:如何将字符串转换为字节数组 - phuzi
4个回答

13

你想要这个吗?

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');

来自Google Developers


我使用这个工具将一个utf8字符串(在大多数情况下是nodejs的默认编码)转换为utf16字符串(这是javascript字符串的默认编码类型)。 - Clifford Fajardo

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)

1

我需要将一个UTF8编码的字符串转换为十六进制的UTF-16字符串:

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();
}

0

要获取 Uint8Array,请使用以下代码

灵感来自 shilch的回答

return bufView 更改为 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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接