Ben*_*Ben -25 unicode codepoint emoji
我正在编写一个处理表情符号的计算机程序。我对如何在内部表示表情符号变体感兴趣。
诸如这些竖起大拇指的表情符号看起来是同一个字符,但具有不同的特征,例如肤色。此外,这些字符似乎占用了相对大量的内存:
console.log('a'.length) // 1
console.log(''.length) // 4
Run Code Online (Sandbox Code Playgroud)
这些字符在内部是如何表示的?
TLDR
在 Unicode 中,带有肤色的表情符号是一种变体形式,为基本字符呈现不同的描述(字形)。
一个表情符号,例如中深肤色的竖起大拇指 () 是由一个由基本字符(竖起大拇指 )组成的字素簇形成的,紧随其后的是一个变体选择器 非间距标记(中-深色肤色)。
“”中有多少个字符?
一。
一的Unicode定义字符为:
(1) 书面语言中具有语义价值的最小成分;指的是抽象的含义和/或形状,而不是特定的形状(另见字形),尽管在代码表中,某种形式的视觉表示对于读者的理解是必不可少的。(2) 抽象字符的同义词。(3) Unicode 字符编码的基本编码单位。(4) 源自中国的表意文字的英文名称。
"" 具有单一的、不可分割的抽象含义(“竖起大拇指”),因此符合单个字符的定义。
“”中有多少个字素?
一。
一的Unicode定义石墨烯是:
(1) 在特定书写系统的上下文中的最小独特的书写单位。例如,‹b›和‹d›在英语书写系统中是不同的字素,因为存在像big和dig这样的不同词。相反,小写斜体字母 a 和小写罗马字母 a 不是不同的字素,因为没有根据这两种不同形式区分单词。(2) 用户认为的角色。
存在一个字素:竖起符号 (U+1F44D),后跟一个非间距标记:中深肤色变化选择器(U+1F3FE)。变体选择器指示应该使用不同的字形来描绘基本字符。
这种基本字符(字素基础)和变体选择器的组合称为字素簇。请注意,变体选择器不会像重音一样组合标记。
一个字素簇通常从一个字素基础开始,然后延伸到任何后续的非间距标记序列。字素簇与文本渲染和处理(例如编辑中的光标放置和文本选择)最直接相关,但也可能与比较和搜索相关。
和,
对于许多进程,一个字素簇表现得好像它是一个与它的字素基础具有相同属性的单个字符。实际上,非间距标记以图形方式应用于基础,但不会更改其属性。
所以,在这个例子中,我们有一个字素和一个非间距标记组成一个字素簇来制作一个字形(对特定字符的描述):
+ makes
Run Code Online (Sandbox Code Playgroud)
“”中有多少个代码点?
二。
代码点的 Unicode 定义是:
(1) Unicode 代码空间中的任何值;即 0 到 10FFFF16 的整数范围。(请参阅第 3.4 节,字符和编码中的定义 D10。)并非所有代码点都分配给编码字符。请参阅代码点类型。(2) 字符的值或位置,在任何编码字符集中。
这里我们有两个来自 Unicode 代码空间的值,所以我们有两个代码点。
在 JavaScript 中,String#[Symbol.Iterator]
迭代代码点,使我们能够“看到”代码点:
“”中有多少个代码单元?
四个(在 UTF-16 中)。
代码单元是编码代码点的一部分的存储单元。
该字符中的两个码位都需要超过 16 位来表示,因此在 UTF-16 中,每个码位有两个码位,总共有四个码位。
\ud83d\udc4d\ud83c\udffe
Run Code Online (Sandbox Code Playgroud)
console.log([...''])
Run Code Online (Sandbox Code Playgroud)
“”中有多少个字节?
八。
在 UTF-16 中,有四个 16 位代码单元,在这个字符中占 8 个字节。
"" 中有多少个代理对?
二。
代理对仅用于 UTF-16。该术语指的是由 2 个代码单元组成的序列,它们共同形成一个代码点。
UTF-16 是可变宽度的 2 字节或 4 字节字符编码。代码点(字符)根据代码点编号以 2 字节或 4 字节编码。
对于 0x0 和 0xFFFF(即 0 到 65,536)之间的代码点,可以在单个代码单元(16 位)中对代码点进行编码。对于 0x10000 和 0x10FFFF 之间的代码点,代码点需要 2 个代码单元(一个 16 位高字和一个 16 位低字)。
在 UTF-16 中,两个代码单元一起形成所谓的代理对。
归档时间: |
|
查看次数: |
717 次 |
最近记录: |