如何在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
相关产品推荐
相关产品推荐

