gpt4 book ai didi

javascript - 如何从 JavaScript 中的字符串中获取第 n 个(Unicode)字符

转载 作者:数据小太阳 更新时间:2023-10-29 04:09:45 24 4
gpt4 key购买 nike

假设我们有一个带有一些 (astral) Unicode 字符的字符串:

const s = 'Hi 👋 Unicode!'

[] 运算符和 .charAt() 方法不适用于获取第 4 个字符,应该是“👋”:

> s[3]
'�'
> s.charAt(3)
'�'

.codePointAt() 确实获得了第 4 个字符的正确值,但不幸的是它是一个数字,必须使用 将其转换回字符串String.fromCodePoint():

> String.fromCodePoint(s.codePointAt(3))
'👋'

类似地,使用 splats 将字符串转换为数组会产生有效的 Unicode 字符,因此这是获取第 4 个字符的另一种方法:

> [...s][3]
'👋'

但我无法相信从字符串到数字再回到字符串,或者必须将字符串拆分为数组是完成这件看似微不足道的事情的唯一方法。有没有简单的方法可以做到这一点?

> s.simpleMethod(3)
'👋'

注意:我知道“字符”的定义有些模糊,但出于这个问题的目的,字符只是对应于 Unicode 代码点的符号(没有组合字符,没有字素簇等)。

更新:String.fromCodePoint(str.codePointAt(n)) 方法实际上并不可行,因为那里的第 n 位置没有采用之前的星体符号考虑到:String.fromCodePoint('👋🙈'.codePointAt(1))//=> '�'


(我问这个问题有点傻;好像我可能遗漏了一些明显的东西。但是 previous answers 这个问题不适用于星界平面上带有 Unicode 符号的字符串。)

最佳答案

字符串迭代器是唯一迭代代码点而不是 UCS-2/UTF-16 代码单元的东西。所以:

const string = 'Hi 👋 Unicode!';
for (const symbol of string) {
console.log(symbol);
}

因此要根据字符串的索引获取特定代码点:

const string = 'Hi 👋 Unicode!';
// Note: The spread operator uses the string iterator under the hood.
const symbols = [...string];
symbols[3]; // '👋'

不过,这会破坏字素簇或表情符号序列,例如 👨‍👩‍👧‍👦 (👨 + U+200D ZERO WIDTH JOINER + 👩 + U+200D ZERO WIDTH JOINER + 👧 + 07x1045 )。 U+200D ZERO WIDTH JOINER 对此有帮助。

不过,您真的需要获取字符串中的第 4 个代码点吗?您的用例是什么?

关于javascript - 如何从 JavaScript 中的字符串中获取第 n 个(Unicode)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com