最近遇到一个项目,客户手机上发送的表情要在电脑网页中显示,没有找到简便方法,于是有了以下方案。
由于Emoji表情传到后台是“口”,怎么找出接收数据中的表情是关键,各种搜索后,我用下面的正则表达式匹配到所有的Emoji表情,然后进行替换成图片。
 
匹配表情的正则表达式
Regex reg = new Regex("(\uD83C[\uDDE8-\uDDFF]\uD83C[\uDDE7-\uDDFF])|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u2600-\u27ff][\uFE0F]|[\u2600-\u27ff]");
 
参考资料
http://www.emoji-cheat-sheet.com/(官方网站)        

PHP-emoji转换表

 
emoji表情来自
http://www.emoji-cheat-sheet.com/(官方网站、名称为英文版、在线)   
https://github.com/Ranks/emojify.js(名称为英文版 png)
 
emoji表情 json 对照文件来自
https://github.com/Ranks/emojify.js utf-16 name 对应 ios6(下文中Emoji_ios6)
https://github.com/github/gemoji 名称表情对应(下文中Emoji_g)
 
替换方式:
            1、表情替换为图片  表情英文名称版
          

       Regex reg = new Regex("(\uD83C[\uDDE8-\uDDFF]\uD83C[\uDDE7-\uDDFF])|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u2600-\u27ff][\uFE0F]|[\u2600-\u27ff]");
MatchCollection match = reg.Matches(test_data);
string emoji_path = Server.MapPath("/Content/others/emoji.json");
StreamReader read = new StreamReader(emoji_path, Encoding.UTF8);
string json = read.ReadToEnd();
List<Emoji_g> emoji_list = JsonConvert.DeserializeObject<List<Emoji_g>>(json);
//StringBuilder sr = new StringBuilder();
//for (int i = 0; i < content.Length; i++)
//{
// sr.Append("\\u");
// sr.Append(((int)content[i]).ToString("X"));
//}
string emoji_str = string.Empty;
string emoji_value = string.Empty;
foreach (Match item in match)
{
StringBuilder sresult = new StringBuilder();
for (int i = ; i < item.Length; i++)
{
sresult.Append(((int)item.Value[i]).ToString("X"));
}
Emoji_g emoji = emoji_list.Where(e => e.unicode == sresult.ToString()).FirstOrDefault();
Emoji_g e_teste = emoji_list.Where(e=>e.aliases[]=="china").FirstOrDefault();
if (emoji != null)
{
test_data = test_data.Replace(item.Value, "<img style='width:22px' src='http://www.emoji-cheat-sheet.com/graphics/emojis/" + emoji.aliases[] + ".png' />");
emoji_str = string.Empty;
emoji_value = string.Empty;
}
else
{
emoji_str += sresult.ToString();
emoji_value += item.Value;
emoji = emoji_list.Where(e => e.unicode == emoji_str).FirstOrDefault();
if (emoji != null)
{
test_data = test_data.Replace(emoji_value, "<img style='width:22px' src='http://www.emoji-cheat-sheet.com/graphics/emojis/" + emoji.aliases[] + ".png' />");
emoji_str = string.Empty;
emoji_value = string.Empty;
}
}
}
return Content(test_data);
            2、表情名称为10进制数字版

       Regex reg = new Regex("(\uD83C[\uDDE8-\uDDFF]\uD83C[\uDDE7-\uDDFF])|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u2600-\u27ff][\uFE0F]|[\u2600-\u27ff]");
MatchCollection match = reg.Matches(content);
string emoji_path = Server.MapPath("/Content/others/emoji_ios6.json");
StreamReader read = new StreamReader(emoji_path, Encoding.UTF8);
string json = read.ReadToEnd();
List<Emoji_ios6> emoji_list = JsonConvert.DeserializeObject<List<Emoji_ios6>>(json);
//StringBuilder sr = new StringBuilder();
//for (int i = 0; i < content.Length; i++)
//{
// sr.Append("\\u");
// sr.Append(((int)content[i]).ToString("X"));
//}
foreach (Match item in match)
{
StringBuilder sresult = new StringBuilder();
for (int i = ; i < item.Length; i++)
{
sresult.Append(((int)item.Value[i]).ToString("X"));
}
Emoji_ios6 emoji = emoji_list.Where(e => e.utf16 == sresult.ToString()).FirstOrDefault();
if (emoji != null)
content = content.Replace(item.Value, "<img style='width:22px' src='/content/emoji/" + Convert.ToInt32(emoji.codepoint, ) + ".png' />");
}
return content;

Emoji表情在网页中显示的更多相关文章

  1. 在网页中显示CHM (c# csharp .net asp.net winform)

    CHM即“已编译的帮助文件”,主要由.hhc(目录文件)..hhk(索引文件)以及相应的帮助主题文件(.html,.htm)这些内容编译而成. 方法对比 在网页中显示CHM内容,大致有以下几种办法: ...

  2. 网页中显示pdf

    1.<embed width="800" height="600" src="test_pdf.pdf"> </embed ...

  3. 非常好的在网页中显示pdf的方法

    今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunkie/web_designers_g ...

  4. Flash设置全屏后,放到网页中显示不正常

    stage.displayState = StageDisplayState.FULL_SCREEN;//全屏,注意当设置全屏后,放到网页中显示不正常

  5. 网页中显示pdf的方法

    非常好的在网页中显示pdf的方法 今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunki ...

  6. 如何在浏览器网页中显示word文件内容

    如何在浏览器网页中显示word文件内容 把word文件读到byte[]中,再Response.OutputStream.Write(bytes)到客户端去 Page_Load事件中写: //FileS ...

  7. 网页中显示xml,直接显示xml格式的文件

    第一种方法 使用<pre></pre>包围代码(在浏览器中测试不行啊,但是在富编辑器中又可以,怪):使用<xmp></xmp>包围代码(官方不推荐,但是 ...

  8. 如何把报表放到网页中显示(Web页面与报表简单集成例子)

    1.问题描述 现在用户开发的系统基本上趋向于BS架构的浏览器/服务器模式,这些系统可能由不同的语言开发,如HTML.ASP.JSP.PHP等,因此需要将制作好的报表嵌入到这些页面中. FineRepo ...

  9. office 文件在网页中显示

    1.如何在网页上显示word和excel a.可以使用office组件或aspose将word 和excel 转换为pdf 然后在网页上打开pdf,但是效果不是很好 .比如说excel 多个工作薄不是 ...

随机推荐

  1. 转:初学者,手工注入测试方法小节 (出处:: 51Testing软件测试网--jie)

    1.加入单引号 ’提交,  结果:如果出现错误提示,则该网站可能就存在注入漏洞.    2.数字型判断是否有注入; 语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)  ...

  2. ionic框架,快速开发webAPP神器。

    官网地址 http://www.ionicframework.com/ 这个国外框架已经很火了.会使用插件的话更好,例如支付宝支付插件,调用摄像头拍照,二维码扫描,通讯录,文件上传,推送信息等等. 最 ...

  3. delphi if 语句循环语句

    if语句------------------------------------------------------------------------------------------------ ...

  4. Swift—静态方法-备

    静态方法与静态属性类似,Swift中定义了静态方法,也称为类型方法.静态方法的定义与静态属性类似,枚举和结构体的静态方法使用的关键字是static:类静态方法使用的关键字是class或static,如 ...

  5. 转:【创龙TMS320C6748开发板试用】相关软件的安装与基本设置+CCS安装失败分析

    http://bbs.elecfans.com/jishu_542000_1_1.html

  6. MCS-51单片机内部结构

    8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解. 8051单片机包含中央处理器.程序存储器(ROM).数据存储器(RAM).定时/计数器.并行接口.串行接口和中断系统 ...

  7. 功能:使用QQ号登陆,并加上微信和短信提醒,是否增量备份可选,阿里大鱼短信发送开发与测试,聚合数据(用JSON发短信,比较清楚)

    微博就可以,所以其它软件也可以http://desktop.weibo.com/ http://blog.csdn.net/jueblog/article/details/14497181http:/ ...

  8. 通过Linux系统Cron执行OwnCloud计划任务

    通过Linux系统Cron执行OwnCloud计划任务 02/02/2013 CRON的确是一个非常有用的功能,它有效减少了系统的负载,在将WordPress和StatusNet的任务计划都转换到Cr ...

  9. android 通过post方式提交数据的最简便有效的方法

    public boolean post(String username, String password) throws Exception { username = URLEncoder.encod ...

  10. STL_vector

    1.任何改变vector长度的操作都会使已经存在的迭代器失效 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容 ...