【问题标题】:How do I encode a JavaScript string in utf-16?如何在 utf-16 中编码 JavaScript 字符串?
【发布时间】:2016-10-02 11:30:23
【问题描述】:

在 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?)?

【问题讨论】:

标签: javascript unicode encoding utf-16


【解决方案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();
}

【讨论】:

    【解决方案2】:

    要获取Uint8Array,请使用此代码

    灵感来自shilch's Answer

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

    【讨论】:

      【解决方案3】:
      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)
      

      【讨论】:

        【解决方案4】:

        你想要这个吗?

        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 字符串的默认编码类型)。
        猜你喜欢
        • 2023-04-11
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        • 2014-01-18
        • 2013-08-17
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多