首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >{Emoji_Presentation}和{Extended_Pictographic}有什么区别?

{Emoji_Presentation}和{Extended_Pictographic}有什么区别?
EN

Stack Overflow用户
提问于 2021-12-18 06:57:21
回答 2查看 875关注 0票数 4

顶答案对“如何使用javascript检测表情符号”的问题使用Extended_Pictographic

Emoji_Presentation在本大卫·沃尔什的博客文章中有提及。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-23 09:35:26

一个关键的区别是,Extended_Pictographic将匹配一组“象形文字”字符,这些字符在技术上不是表情符号,或者默认情况下不显示为彩色表情符号:

代码语言:javascript
运行
复制
"1♡⌨︎".match(/\p{Emoji_Presentation}/gu)    // ['', '']
"1♡⌨︎".match(/\p{Extended_Pictographic}/gu) // ['', '', '♡', '⌨︎']

\p{Emoji_Presentation}只匹配默认情况下以彩色表情符号形式显示的表情符号。

也有\p{Emoji},但在大多数现实世界中最好避免这样做:

代码语言:javascript
运行
复制
"1♡⌨︎".match(/\p{Emoji}/gu) // ['1', '', '', '⌨︎']

IIUC,1有一个表情符号/有色表示(1️⃣),所以是由\p{Emoji}匹配的,但是默认情况下1没有以它的表情符号/有色形式显示,所以它不被\p{Emoji_Presentation}匹配。⌨︎也是如此。我想根本没有被归类为表情符号,而是属于“象形文字”类。

请注意,上面的解释意味着一个表情符号可以是彩色的,但却不能被\p{Emoji_Presentation}匹配。例如,❄️是一个默认以黑白显示的“旧”表情符号。您看到它着色的原因是因为它后面有特殊的“变体选择器16”(\uFE0F),这使得它以彩色的形式呈现。如果您想要匹配字符串中的所有颜色的表情符号,而不管它们的“默认”表示是什么,那么我认为这应该是可行的:

代码语言:javascript
运行
复制
"1♡⌨︎❄️".match(/(\p{Emoji}\uFE0F|\p{Emoji_Presentation})/gu) // ['', '', '❄️']

\p{Emoji}\uFE0F部分是导致上述正则表达式与雪花匹配的原因。注意,在上面的代码块中,雪花被呈现为黑白,但这只是CSS相关的事情,因为它在一个代码块中。

票数 5
EN

Stack Overflow用户

发布于 2021-12-19 16:36:46

象形文字性质是在Unicode技术标准51,Unicode中定义的,主要用于断线和其他分割算法。

表示属性也在UTS #51中定义。创建它是为了帮助应用程序在遇到某些Unicode字符时选择默认的表示形式:单色文本或全色表情符号。之所以需要这样做,是因为在第一次编码表情符号时,决定将日本使用的表情符号与现有的Unicode字符统一起来,当有一个与表情符号匹配的现有字符时。(事后看来,由于这个问题,这可能不是最好的决定。)

注意,Extended_Pictographic是Unicode代码点的属性,有些代码点还没有分配给任何字符。您可以看到按Extended_Pictographic (字符)属性值在Presentation&i=上分组的所有Presentation&i=代码点的列表。(这显示了它们按块分组。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70401560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档