You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中将整个字符串编码为UTF-16?(code.org环境)

在JavaScript中将整个字符串转换为UTF-16编码(适配code.org平台)

方法1:获取UTF-16码点数组

JavaScript字符串本身就是以UTF-16编码存储的,如果你需要将整个字符串转换为对应的UTF-16码点数组,可以通过循环遍历字符串的每个字符,调用charCodeAt()方法收集结果:

function getUTF16CodePoints(str) {
  const codePoints = [];
  for (let i = 0; i < str.length; i++) {
    codePoints.push(str.charCodeAt(i));
  }
  return codePoints;
}

// 示例用法
const inputStr = "Hello, 世界";
const utf16Codes = getUTF16CodePoints(inputStr);
console.log(utf16Codes); // 输出: [72, 101, 108, 108, 111, 44, 32, 19996, 30028]

方法2:获取UTF-16字节数组(含大小端处理)

如果需要的是UTF-16编码的原始字节序列(比如用于文件或网络传输),可以使用Uint16Array和Uint8Array来处理,同时支持大端/小端字节序:

function stringToUTF16Bytes(str, useLittleEndian = false) {
  // 每个UTF-16字符占2字节,创建对应大小的缓冲区
  const buffer = new ArrayBuffer(str.length * 2);
  const uint16View = new Uint16Array(buffer);
  
  // 填充UTF-16码点
  for (let i = 0; i < str.length; i++) {
    uint16View[i] = str.charCodeAt(i);
  }
  
  // 转换为字节数组
  const byteArray = new Uint8Array(buffer);
  
  // 处理小端字节序:交换每个字符的两个字节
  if (useLittleEndian) {
    for (let i = 0; i < byteArray.length; i += 2) {
      const temp = byteArray[i];
      byteArray[i] = byteArray[i + 1];
      byteArray[i + 1] = temp;
    }
  }
  
  return Array.from(byteArray);
}

// 示例用法
const inputStr = "Hello";
const bigEndianBytes = stringToUTF16Bytes(inputStr);
const littleEndianBytes = stringToUTF16Bytes(inputStr, true);
console.log(bigEndianBytes); // 大端字节序: [0, 72, 0, 101, 0, 108, 0, 108, 0, 111]
console.log(littleEndianBytes); // 小端字节序: [72, 0, 101, 0, 108, 0, 108, 0, 111, 0]

关于code.org平台的兼容性

code.org使用的JavaScript环境支持基础的循环、数组操作以及Uint16Array/Uint8Array这些类型,上述代码可以直接在平台中运行。如果遇到超出BMP的字符(如表情符号😀),charCodeAt()会返回代理对的两个码点,这符合UTF-16的编码规则;如果需要获取完整的Unicode码点,可以替换为codePointAt()方法(code.org环境也支持)。

内容的提问来源于stack exchange,提问作者Tatsuma Kurose-Dobney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:04:59