emoji表情与unicode编码互转的实现(JS,JAVA,C#)

作者:追极 时间:2023-02-07 06:07:48 

前几天刚好有需求要把emoji对应的Unicode编码转换成文字,比如1f601对应的这个笑脸😁,但没有找到C#的把1f601转换成文字的方法,用Encoding.Unicode怎么转换都不对,最后直接复制emoji字符,Visual Studio里面竟然直接显示出来了,那就直接用字符吧,都不用转换了,然后不了了之了。

今天搞Markdown编辑器,由于前面GFM的原因,又对编码进行测试,没查到什么靠谱资料,到时找到很多emoji和Unicode对照表,https://apps.timwhitlock.info/emoji/tables/unicode拿一个笑脸https://apps.timwhitlock.info/unicode/inspect/hex/1F601开刀~

1.表情字符转编码

【C#】


Encoding.UTF32.GetBytes("😁") -> ["1", "f6", "1", "0"]

【js】


"😁".codePointAt(0).toString(16) -> 1f601

【java】


 byte[] bytes = "😀".getBytes("utf-32");
 System.out.println(getBytesCode(bytes));

private static String getBytesCode(byte[] bytes) {
   String code = "";
   for (byte b : bytes) {
     code += "\\x" + Integer.toHexString(b & 0xff);
   }
   return code;
 }

UTF-32结果一致

【C#】


Encoding.UTF8.GetBytes("😁") -> ["f0", "9f", "98", "81"]

【js】


encodeURIComponent("😁") -> %F0%9F%98%81

UTF-8结果一致

2.编码转表情字符

【js】


String.fromCodePoint('0x1f601')  utf-32

【java】 


String emojiName = "1f601"; //其实4个字节
 int emojiCode = Integer.valueOf(emojiName, 16);
 byte[] emojiBytes = int2bytes(emojiCode);
 String emojiChar = new String(emojiBytes, "utf-32");
 System.out.println(emojiChar);

public static byte[] int2bytes(int num){
   byte[] result = new byte[4];
   result[0] = (byte)((num >>> 24) & 0xff);//说明一
   result[1] = (byte)((num >>> 16)& 0xff );
   result[2] = (byte)((num >>> 8) & 0xff );
   result[3] = (byte)((num >>> 0) & 0xff );
   return result;
 }

c# 汉字和Unicode编码互相转换实例


/// <summary>
/// <summary>
/// 字符串转Unicode
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>Unicode编码后的字符串</returns>
public static string String2Unicode(string source)
{
byte[] bytes = Encoding.Unicode.GetBytes(source);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < bytes.Length; i += 2)
{
stringBuilder.AppendFormat("\\u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0'));
}
return stringBuilder.ToString();
}

/// <summary>
/// Unicode转字符串
/// </summary>
/// <param name="source">经过Unicode编码的字符串</param>
/// <returns>正常字符串</returns>
public static string Unicode2String(string source)
{
return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace(
  source, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16)));
}

参考地址:

https://www.jianshu.com/p/8a416537deb3

https://blog.csdn.net/a19881029/article/details/13511729

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

来源:https://www.cnblogs.com/hdwang/p/10309163.html

标签:emoji表情,unicode编码
0
投稿

猜你喜欢

  • @Value如何获取yml和properties配置参数

    2021-12-12 13:24:01
  • Idea springboot springCloud热加载热调试两种常用方式

    2021-06-11 22:20:06
  • myBatis组件教程之缓存的实现与使用

    2023-09-24 00:49:18
  • 教你怎么使用hadoop来提取文件中的指定内容

    2021-07-08 02:22:50
  • C#事件管理器如何清空所有监听详解

    2022-01-17 14:29:44
  • Android实现的RecyclerView适配器

    2023-07-12 23:02:21
  • Flutter中数据库的使用教程详解

    2023-12-09 11:16:28
  • Java设计模式之工厂模式案例详解

    2023-11-27 20:08:03
  • SpringCloud消息总线Bus配置中心实现过程解析

    2023-02-14 10:05:18
  • java识别一篇文章中某单词出现个数的方法

    2022-04-24 06:18:40
  • C# JsonHelper 操作辅助类,拿来直接用

    2023-11-28 18:55:42
  • C++实现LeetCode(169.求大多数)

    2023-09-04 08:03:47
  • Android开发高仿课程表的布局实例详解

    2022-02-01 18:33:19
  • C# 多窗口委托通信的实现

    2023-01-22 02:21:31
  • Android开发5:应用程序窗口小部件App Widgets的实现(附demo)

    2023-04-22 20:15:36
  • Android不显示开机向导和开机气泡问题

    2022-10-13 23:56:26
  • WinForm窗体间传值的方法

    2023-12-17 08:53:08
  • 关于Android中点击通知栏的通知启动Activity问题解决

    2023-12-17 10:08:18
  • 如何设计一个安全的API接口详解

    2023-03-06 14:57:03
  • IDEA下载并大学生edu邮箱认证免费使用教程(图文)

    2022-10-10 14:23:02
  • asp之家 软件编程 m.aspxhome.com