我想使用索引从Unicode字符串中获取特定字母。但是,它不能按预期工作。
示例:
var handwriting = `1234567890`
var normal = `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`
console.log(normal[3]) // gives 'd' but
console.log(handwriting[3]) // gives '�' instead of ''
长度也无法按预期工作normal.length
给出的正确值是 62 ,但是handwriting.length
给出的是 114。
索引无法正常工作。如何访问unicode数组的元素?
我在python上试了一下,它可以正常工作,但是在Javascript中,它不起作用。
我需要unicode字符串中的确切字符,例如索引3的预期输出'd'”
答案 0 :(得分:2)
在Javascript中,字符串是16位代码点的序列。由于这些字符是在基本多语言平面上编码的,因此这意味着它们由一对代码点表示,也称为代理对。
的Unicode编号为
U+1D586
。并且0x1D586大于0xFFFF(2 ^ 16)。因此,由一对代码点表示,也称为代理对
console.log("".length)
console.log("" === "\uD835\uDD86")
一种方法是使用扩展语法或Array.from()
创建字符数组,然后获取所需的索引
var handwriting = `1234567890`
console.log([...handwriting][3])
console.log(Array.from(handwriting)[3])
答案 1 :(得分:2)
一个Unicode字符看起来像'\ u00E9',因此,如果您的字符串较长,这是正常的。 要具有unicode字符串的真实长度,必须将其转换为数组:
let charArray = [...handwriting]
console.log(charArray.length) //=62
数组的每个项目都是字符串的一个字符。 charArray [3]将返回与''
相对应的unicode char