如何从Unicode字符串中获取正确的元素?

时间:2019-05-31 07:04:47

标签: javascript unicode

我想使用索引从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'”

2 个答案:

答案 0 :(得分:2)

  

在Javascript中,字符串是16位代码点的序列。由于这些字符是在基本多语言平面上编码的,因此这意味着它们由一对代码点表示,也称为代理对。

Reference

的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