Unicode与UTF16编码(Emoji表情包)

文章目录

应用: 在文本编辑器中表情包通常使用UTF16编码进行表示

注意: Java中并不能直接打印Unicode编码的内容,需要转成UTF16编码才可以

在这里插入图片描述

原理

//1个unicode编码实际值大于4位16进制数 == 转化成两个UTF16编码  【笑脸表强包Unicode编码:1F600】
1.Unicode 编码的值减去 0x10000,得到一个 20 位的二进值  == 不够20位,则左侧补0
       笑脸:F600  ==> 二进制:00001 11101 10000 00000
2. 将这个 20 位的值分成两个 10 位的部分,分别称为高位部分和低位部分。
       高位:00001 11101   低位:10000 00000
3. 将高位部分加上 0xD800 得到第一个 16 位的编码单元,即 UTF-16 编码的高位部分。
       0xD800 ==1101 0100 0000 0000
       高位:00001 11101   =补足16=0000 0000 0011 1101
       最终(二进制):1101 0100  0011 1101
       最终(十六制):    D      8       3     D
4. 将低位部分加上 0xDC00 得到第二个 16 位的编码单元,即 UTF-16 编码的低位部分。
       0xDC00 ==1101 1100 0000 0000
       低位:10000 00000  =补足16=0000 0010 0000 0000
       最终(二进制):1101 1110 0000 0000
       最终(十六制):     D     E      0     0
5. 将这两个编码单元按照顺序排列,即先排列高位部分,再排列低位部分,得到最终的 UTF-16 编码。
        \uD83D\uDE00


//1个unicode编码实际值不大于4位16进制数 == 转化成1个UTF16编码【16位的二进制,不够则左侧补0】
//总之每个UTF16必须是4位16进制数


代码

代码来源直接参考: https://gitee.com/dongguoshuai/img-processing/blob/master/src/main/java/cn/dong/processing/support/EmojiImgHolder.java

    /**
     * unicode转化
     *@Author dong
     *@Date 2023/4/13 上午 11:42
     *@param unicodeStr
     *@return
     */
    private static String convert(String unicodeStr) {
        if (unicodeStr.isEmpty()) {
            return unicodeStr;
        }
        String[] parts = unicodeStr.split("-");
        StringBuilder buff = new StringBuilder();
        for (String s : parts) {
            int part = Integer.parseInt(s, 16);
            if (part >= 0x10000 && part <= 0x10FFFF) {
                int hi = (int) (Math.floor((part - 0x10000) / 0x400) + 0xD800);
                int lo = ((part - 0x10000) % 0x400) + 0xDC00;
                Console.log("{} == 高位:{}【{}】、低位:{}【{}】", unicodeStr, hi, Integer.toHexString(hi),lo, Integer.toHexString(lo));
                buff.append(new String(Character.toChars(hi)) + new String(Character.toChars(lo)));
            } else {
                buff.append(new String(Character.toChars(part)));
            }
        }
        return buff.toString();
    }
    
    
    public static void main(String[] args) {
        Console.log("\n=================================\n");

        String convert = convert("1F600");
        Console.log(convert);

        Console.log("\uD83D\uDE00");
        Console.log("\uD83C\uDC04");


        // Integer.
    }    

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 玩转 Emoji 表情,首先需要了解 EmojiUnicode 编码Emoji 表情其实是由 Unicode 编码规定的,每个 Emoji 表情对应着一个 Unicode 编码。Python 通过 Unicode 编码来识别和处理 Emoji 表情。 举个例子,比如常见的微笑表情,它的 Unicode 编码是 “😊” 对应的 UTF-8 编码是“F0 9F 98 8A”。Python 中可以通过 Unicode 编码来表示这个 Emoji 表情,代码为 u"\U0001F60A"。 虽然在 Python3 中默认支持 Unicode,但是为了确保在各种环境中的正常运行,我们需要使用 emoji 模块来操作 Emoji 表情。 在使用 emoji 模块时,首先需要安装,可以使用 pip 包管理工具进行安装,在 Python 中通过 import 引入这个emoji 模块,然后就可以通过 emoji.emojize() 方法来将 Unicode 转换成对应的 Emoji 表情了,同时 emoji.demojize() 方法可以将 Emoji 表情转换成对应的 Unicode 编码。 接下来我们可以使用这个模块来实现一些简单的 Emoji 表情操作。 比如我们可以使用下面这段代码来输出一句话,并添加一个微笑表情: from emoji import emojize print(emojize("大家好! :smile:")) 运行效果如下: 大家好! 😊 除了普通的 Emoji 表情外,emoji 模块还支持一些表情的组合,如使用 emoij.emojize(":thumbs_up: :skin-tone-2:") 可以得到一个带有中等肤色点赞的 Emoji 表情。 总之,Python 可以很方便的处理 Emoji 表情,emoji 模块为我们提供了很好的支持,如有需要还可以自定义 Emoji 表情,玩转 Emoji,让您的 Python 更加生动有趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值