js 实现 unicode
Unicode 编码与解码
在 JavaScript 中,Unicode 可以通过多种方式处理和转换。以下是常见的 Unicode 操作方法:
字符串直接使用 Unicode 转义序列
JavaScript 字符串支持 Unicode 转义序列,格式为 \uXXXX(4 位十六进制)或 \u{XXXXXX}(1-6 位十六进制):
const str1 = '\u0041'; // "A"
const str2 = '\u{1F600}'; // "😀"
获取字符的 Unicode 码点
使用 charCodeAt() 获取 UTF-16 编码单元(适用于 BMP 字符),或 codePointAt() 获取完整 Unicode 码点:
'😀'.charCodeAt(0); // 返回 55357(高位代理)
'😀'.codePointAt(0); // 返回 128512(完整码点)
从码点生成字符
使用 String.fromCharCode()(适用于 BMP 字符)或 String.fromCodePoint():
String.fromCharCode(65); // "A"
String.fromCodePoint(128512); // "😀"
字符串与 Unicode 编码互转
通过 escape()/unescape()(已弃用)或手动实现编码转换:
// 编码为 Unicode 转义序列
function encodeUnicode(str) {
return Array.from(str).map(c =>
`\\u${c.codePointAt(0).toString(16).padStart(4, '0')}`
).join('');
}
// 解码 Unicode 转义序列
function decodeUnicode(str) {
return str.replace(/\\u([\dA-F]{4})/gi, (_, hex) =>
String.fromCodePoint(parseInt(hex, 16))
);
}
UTF-8 编码转换
如需处理 UTF-8 字节序列,可使用 TextEncoder 和 TextDecoder API:
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const utf8Bytes = encoder.encode('你好'); // Uint8Array
const originalStr = decoder.decode(utf8Bytes); // "你好"
正则表达式与 Unicode
使用 u 标志启用 Unicode 模式,正确处理代理对和 Unicode 属性:

/^\u{1F600}$/u.test('😀'); // true
/\p{Emoji}/u.test('👍'); // true(需支持 ES2018)
注意事项
- BMP(基本多文种平面)字符使用 4 位十六进制表示(
\uXXXX),非 BMP 字符需使用\u{XXXXXX}或代理对。 codePointAt()和fromCodePoint()是处理非 BMP 字符的推荐方法。- 浏览器环境下
escape()/unescape()可能表现不一致,建议避免使用。






