JavaScript拼接Unicode出现「无效Unicode转义序列」报错如何解决?
报错根因
\u是JavaScript语法级别的Unicode转义标识,解析阶段就要求紧跟4位十六进制字符,你代码中的\u003是不完整转义序列,解析器还没等到变量拼接就会直接抛出错误。- 你使用的
split()未传分隔符参数,会将整个"5000"字符串作为数组唯一元素,无法拆分出单个数字,需要改为split('')。
修复方案
方案1:String.fromCodePoint实现(推荐)
直接通过码点计算生成对应字符,逻辑清晰无兼容问题:
let test = "5000", string = ''; // 必须初始化空字符串,否则拼接会自带undefined前缀 let unicode = test.split('') for(let i = 0; i < unicode.length; i++) { // 0x30对应字符0的Unicode码点,加当前数字即可得到对应数字的码点 const digitCode = 0x30 + Number(unicode[i]); string += String.fromCodePoint(digitCode, 0xFE0F, 0x20E3); } console.log(string);
运行后会输出你预期的带键帽样式的数字序列5⃣0⃣0⃣0⃣。
方案2:URI转义拼接实现
如果需要维持原有拼接逻辑,可以用URI转义规则处理:
let test = "5000", string = ''; let unicode = test.split('') for(let i = 0; i < unicode.length; i++) { string += decodeURIComponent(`%u003${unicode[i]}%uFE0F%u20E3`); } console.log(string);
内容的提问来源于stack exchange,提问作者Tim Levinsson
相关产品推荐
相关产品推荐

