![]() |
1
2
参见: What every JavaScript developer should know about Unicode JavaScript has a Unicode problem |
![]() |
2
1
|
![]() |
3
1
tl;dr有解决方案,但它们在每种情况下都不起作用。Unicode就像一种黑色的艺术。 我所看到的各种解决方案似乎都存在局限性,这个问题超越了emoji,并且涵盖了Unicode范围内的其他字符。考虑_)可以存储为_)或e+226;_,如果使用 combing characters . 这甚至可以导致两个看起来相同的字符串 not being equal . 另外请注意,在某些情况下,存储时单个emoji可以是11个字符,结果是22个字节,假设是utf16。 处理方式以及字符组合或显示方式在浏览器和操作系统之间甚至可能有所不同。所以,虽然你可能认为你破解了它,但另一个环境可能会破坏它。一定要测试它的重要性。 现在,有一个前端和后端的问题:你解决了字符计数问题,所以它对人类用户很有效,现在你的单个emoji正好超过了数据库中分配的字段大小。对于Mongo这样的数据库来说,这不是什么问题,但是对于SQL数据库,字段分配是保守的。这意味着你如何解决你的问题将取决于最困难的限制出现在哪里。 注意,基本的解决方案确实涉及到将字符串转换为数组并获取长度,接受限制:
当字符组合和处理 astral planes . 考虑到局限性的一些高级方法:
另外,考虑到这个问题的复杂性,是否有一个流行的JS库已经处理了这个问题,这可能值得一看?我在写作时没有找到。希望这在某种程度上会成为JavaScript的核心。 其他要阅读的页面: |
![]() |
4
0
从下面的示例中可以看到,这与Unicode编码有关, 有一些很好的资源,比如我举这个例子的那个。 https://blog.jonnew.com/posts/poo-dot-length-equals-two
|
![]() |
M - · 为什么两个相同的表情符号不相等? 3 年前 |
![]() |
Baraphor · 在游戏中正确添加表情符号 7 年前 |
![]() |
sirdan · 如何在JLabel中获得带有颜色的表情符号 7 年前 |
![]() |
sheldonzy · 文字和表情符号计数器 7 年前 |
![]() |
nestalgia · 如何从UTF-8文件中检索原始字符串? 7 年前 |
|
C1710 · EmojiCompat的自定义字体 8 年前 |