【发布时间】:2019-03-02 18:17:55
【问题描述】:
在我的 js 中,我正在尝试 substring() 文本,该文本通常有效,但不幸的是会斩首表情符号。
usaText = "A????????Z"
splitText = usaText.substring(0,2) //"A�"
splitText = usaText.substring(0,3) //"A????"
splitText = usaText.substring(0,4) //"A????�"
splitText = usaText.substring(0,5) //"A????????"
有没有办法在不破坏表情符号的情况下使用子字符串?在我的生产代码中,我剪掉了大约 40 个字符,我不介意它是 35 还是 45。我曾考虑过简单地检查第 40 个字符是数字还是 az 之间,但如果你有文本,那就行不通了充满表情符号。我可以通过模式匹配检查最后一个字符是否是“结束”表情符号的字符,但这在性能方面似乎也有点奇怪。
我错过了什么吗?考虑到 JavaScript 的臃肿,难道没有内置的 count 将表情符号视为一个吗?
chrs = Array.from( usaText )
(4) ["A", "????", "????", "Z"]
0: "A"
1: "????"
2: "????"
3: "Z"
length: 4
不幸的是,这太多了。
【问题讨论】:
-
您可以考虑寻找表情符号,记录它们的位置,然后删除它们。然后做子字符串,然后根据它们在原始字符串中的位置将表情符号放入子字符串中。子字符串的长度将不再相同,但您说这不是问题。
-
忘掉“emoji”吧,你问的是代理对 UTF-16,它适用于普通语言,就像它们适用于 emoji 一样。对此有一个优雅的解决方案,已在 stackoverflow.com/questions/21397316/… 上回答,包括使用
Array.from(yourstring),它将您的字符串拆分为单独的 unicode 字符,而不会在字节之间破坏它们。 -
请检查我的代码。我确实已经尝试过了,虽然它让我的情况有所好转,但它仍然给我留下了 2 个部分。
标签: javascript utf-8 substring emoji