不要小看小小的 emoji 表情 (2)

这也有几方面的原因,比如说除开英文,其他大部分的文字都需要用 2 个甚至更多的字节来表示;如果统一都用 Unicode 来表示,那必然需要以占用字节最多的字符长度为标准。

比如汉字需要 2 个字节来表示,而英文只需要一个字节;这时就得规定 2 个字节表示一个字符,不然汉字就没法表示了。

但这样也会带来一个问题:用两个字节表示英文会使得第一个字节完全是浪费的,如果一段信息全是英文那对内存的浪费是巨大的。

这时大家应该都能想到,我们需要一个可变的长度的字符编码规则,当是英文时我们就用一个字节表示,甚至可以完全兼容 ASCII 码。

UTF-8 便是实现这个需求的,它利用两种规则可以表示一个字节以及多字节的字符。

不要小看小小的 emoji 表情

大致规则如下:

当第一个字节的第一位为 0 时便表示为单字节字符,此时和 ASCII 码一致,完全兼容。

当第一个字节为 1 时,有几个 1 便代表是几个字节 Unicode 字符。

这样便可根据字符的长度最大程度的节省存储空间。

当然还有其他的编码规则,比如 UTF-16、UTF-32,平时用的不多,但本质上都和 UTF-8 一样,都是 Unicode 的不同实现,也是用于表示世界上大部分文字的字符集。

Java 中的 emoji

现在来回到本次的主题,emoji。

刚才说到 Unicode 包含了世界上大部分的字符,emoji 自然也不例外。

不要小看小小的 emoji 表情

https://apps.timwhitlock.info/emoji/tables/unicode

这个表格中包含了所有的 emoji 以及它所对应的 Unicode 编码,同时也有对应的 UTF-8 编码的实现。

从图中也可以看出 emoji 表情用 UTF-8 表示时会占用 4 个字节,那在 Java 中它会是怎么存储的呢?

很简单,debug 一下就知道了。

不要小看小小的 emoji 表情

在 Java 中也是通过 char 来存储 emoji 的,char 作为基本数据类型会占用 2 个字节;从刚才的图中可以看出,emoji 使用 UTF-8 会占用四个字节,这样很明显 char 是没法存储的,所以在这里其实是使用 UTF-16 编码进行存储。

基于这个原理,我们也可以自己实现将一个 emoji 表情转换为字符串,同时也可通过字符串转换为 emoji。

不要小看小小的 emoji 表情

总结

从这次研究 emoji 可以看出,任何一门基础知识都是应用的根基,在计算机行业尤为突出,希望大家看完这篇能回忆起大学课堂被老师支配的恐惧

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwfdx.html