emoji表情與unicode編碼互轉(zhuǎn)的實現(xiàn)(JS,JAVA,C#)
前幾天剛好有需求要把emoji對應(yīng)的Unicode編碼轉(zhuǎn)換成文字,比如1f601對應(yīng)的這個笑臉😁,但沒有找到C#的把1f601轉(zhuǎn)換成文字的方法,用Encoding.Unicode怎么轉(zhuǎn)換都不對,最后直接復(fù)制emoji字符,Visual Studio里面竟然直接顯示出來了,那就直接用字符吧,都不用轉(zhuǎn)換了,然后不了了之了。
今天搞Markdown編輯器,由于前面GFM的原因,又對編碼進行測試,沒查到什么靠譜資料,到時找到很多emoji和Unicode對照表,https://apps.timwhitlock.info/emoji/tables/unicode拿一個笑臉https://apps.timwhitlock.info/unicode/inspect/hex/1F601開刀~
1.表情字符轉(zhuǎn)編碼
【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結(jié)果一致
【C#】
Encoding.UTF8.GetBytes("😁") -> ["f0", "9f", "98", "81"]
【js】
encodeURIComponent("😁") -> %F0%9F%98%81
UTF-8結(jié)果一致
2.編碼轉(zhuǎn)表情字符
【js】
String.fromCodePoint('0x1f601') utf-32
【java】
String emojiName = "1f601"; //其實4個字節(jié)
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編碼互相轉(zhuǎn)換實例
/// <summary>
/// <summary>
/// 字符串轉(zhuǎn)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轉(zhuǎn)字符串
/// </summary>
/// <param name="source">經(jīng)過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
到此這篇關(guān)于emoji表情與unicode編碼互轉(zhuǎn)的實現(xiàn)(JS,JAVA,C#)的文章就介紹到這了,更多相關(guān)emoji表情與unicode編碼互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java利用Netty時間輪實現(xiàn)延時任務(wù)
時間輪是一種可以執(zhí)行定時任務(wù)的數(shù)據(jù)結(jié)構(gòu)和算法。本文將為大家詳細講解一下Java如何利用Netty時間輪算法實現(xiàn)延時任務(wù),感興趣的小伙伴可以了解一下2022-08-08
Java SpringBoot微服務(wù)框架驗證碼報錯問題解決方案
這篇文章主要介紹了Java SpringBoot微服務(wù)框架驗證碼報錯問題解決方案,包括dockerfile容器操作和完整dockerfile,本文給大家介紹的非常詳細,需要的朋友可以參考下2024-08-08
基于idea解決springweb項目的Java文件無法執(zhí)行問題
這篇文章給大家介紹了基于idea解決springweb項目的Java文件無法執(zhí)行問題,文中通過圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
springboot中事務(wù)管理@Transactional的注意事項與使用場景
今天小編就為大家分享一篇關(guān)于springboot中事務(wù)管理@Transactional的注意事項與使用場景,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04

