gpt4 book ai didi

javascript - 如何使用带有特殊 unicode 字符的子字符串?

转载 作者:行者123 更新时间:2023-12-05 00:38:04 25 4
gpt4 key购买 nike

var string = "abc𝑚";
var lastchar = string.substr(string.length - 1);
console.log(lastchar);

这回来了?而不是𝑚

最佳答案

在 JavaScript 中,字符串是一系列 UTF-16 代码单元(详细信息在 my blog post What is a string? 中)。在 UTF-16 中,最后一个字形(松散地称为“字符”)需要两个代码单元(它们组合成一个代码点),因此您的字符串长度为 5。
在 ES2015 之前,JavaScript 中并没有太多内置功能可以帮助您解决此问题,但是当引入可迭代性时,字符串变成了可迭代的,并且它们迭代其代码点,而不是代码单元。传播操作使用迭代,因此您可以将该字符串传播到一个数组中以获取其代码点:

const string = "abc𝑚";
console.log(string.length); // 5
const chars = [...string];
console.log(chars.length); // 4
const lastchar = chars.slice(chars.length - 1).join("");
console.log(lastchar);

这只是演示区别以及如何相当轻松地使用代码点的示例。
甚至代码点也不一定是字形,因为一些代码点与其他代码点结合形成一个字形。 (例如,在 Devanagari 中,该语言的单词是“देवनागरी”,对于 native 读者来说,它看起来像五个字形,但实际上是八个代码点,因为其中一些是用一个由元音代码点修改的基本音节字形编写的.) 有一个新的 Intl.Segmenter 正在开发中,这也将有助于解决这些情况。

关于javascript - 如何使用带有特殊 unicode 字符的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70302587/

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