- 浏览: 1571731 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
1:先弄到图片 上传到服务器上
2.下载 unicode 和 表情 映射关系xml
emoji4unicode.xml 在下面的rar 中
3.加入这个一个 转换类
3.调用 servlet
4.写成一个ELfunction 在jsp EL 表达式中 使用
5;编写 tld文件
6:jsp中使用
https://raw.githubusercontent.com/googlei18n/emoji4unicode/master/data/emoji4unicode.xml 这里是官方的最全的代码,如果没更新,那也没办法了,只能自己添加了
2.下载 unicode 和 表情 映射关系xml
emoji4unicode.xml 在下面的rar 中
3.加入这个一个 转换类
package com.fanbaobao.util; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; public class EmojiConverter { private EmojiConverter() { } enum Type { UNICODE, SOFTBANK }; private Map<List<Integer>, String> convertMap; public static class Builder { private Type from; private Type to; public Builder from(Type type) { this.from = type; return this; } public Builder to(Type type) { this.to = type; return this; } public EmojiConverter build() { EmojiConverter converter = new EmojiConverter(); readMap(converter); return converter; } private static final String TRIM_PATTERN = "[^0-9A-F]*"; public void readMap(EmojiConverter converter) { Map<List<Integer>, String> result = new HashMap<List<Integer>, String>(); converter.convertMap = result; XMLEventReader reader = null; try { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream stream = EmojiConverter.class.getClassLoader() .getResourceAsStream("emoji4unicode.xml"); reader = factory.createXMLEventReader(stream); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { StartElement element = (StartElement) event; if (element.getName().getLocalPart().equals("e")) { Attribute fromAttr = element .getAttributeByName(new QName(from.toString().toLowerCase())); Attribute toAttr = element .getAttributeByName(new QName(to.toString() .toLowerCase())); if (fromAttr == null) { continue; } List<Integer> fromCodePoints = new ArrayList<Integer>(); String from = fromAttr.getValue(); if (from.length() > 6) { String[] froms = from.split("\\+"); for (String part : froms) { fromCodePoints.add(Integer.parseInt( part.replaceAll(TRIM_PATTERN, ""), 16)); } } else { fromCodePoints.add(Integer.parseInt( from.replaceAll(TRIM_PATTERN, ""), 16)); } if (toAttr == null) { result.put(fromCodePoints, null); } else { String to = toAttr.getValue(); StringBuilder toBuilder = new StringBuilder(); if (to.length() > 6) { String[] tos = to.split("\\+"); for (String part : tos) { toBuilder.append(Character .toChars(Integer.parseInt(part .replaceAll( TRIM_PATTERN, ""), 16))); } } else { toBuilder.append(Character.toChars(Integer .parseInt(to.replaceAll( TRIM_PATTERN, ""), 16))); } result.put(fromCodePoints, toBuilder.toString()); } } } } reader.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (XMLStreamException e) { } } } } } public String convert(int width,int height,String imgpath,String input) { StringBuilder result = new StringBuilder(); int[]codePoints = toCodePointArray(input); for(int i = 0; i < codePoints.length; i++){ List<Integer> key2 = null; if(i + 1 < codePoints.length){ key2 = new ArrayList<Integer>(); key2.add(codePoints[i]); key2.add(codePoints[i + 1]); if(convertMap.containsKey(key2) || 65039==codePoints[i + 1]){ //处理 iphone5 xxxx-fe0f.png String aa=Integer.toHexString(codePoints[i])+"-"+Integer.toHexString(codePoints[i+1]); String value = convertMap.get(key2); if(value != null || 65039==codePoints[i + 1]){ result.append("<img width=\""+width+"px\" height=\""+height+"px\" style=\"vertical-align: bottom;\" src=\""+imgpath+""); result.append(aa); result.append(".png\"/>"); } i++; continue; } } List<Integer> key1 = new ArrayList<Integer>(); key1.add(codePoints[i]); if(convertMap.containsKey(key1)){ String aa=Integer.toHexString(codePoints[i]); String value = convertMap.get(key1); if(value != null){ result.append("<img width=\""+width+"px\" height=\""+height+"px\" style=\"vertical-align: bottom;\" src=\""+imgpath+""); result.append(aa); result.append(".png\"/>"); //System.out.println("key:"+key1); //System.out.println("Map:"+value); } continue; } if(128529==codePoints[i]){ //处理空格 result.append(" "); continue; } result.append(Character.toChars(codePoints[i])); } return result.toString(); } int[] toCodePointArray(String str) { char[] ach = str.toCharArray(); int len = ach.length; int[] acp = new int[Character.codePointCount(ach, 0, len)]; int j = 0; for (int i = 0, cp; i < len; i += Character.charCount(cp)) { cp = Character.codePointAt(ach, i); acp[j++] = cp; } return acp; } }
3.调用 servlet
public class ShareServlet extends HttpServlet { private static EmojiConverter converter; private static String imgpath="http://xx.xxxx.com/opt/siteimg/mika/emoji/unicode/"; @Override public void init() throws ServletException { converter = new EmojiConverter.Builder() .from(Type.UNICODE) .to(Type.SOFTBANK) .build(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { FbbServiceClient service=null; try { String userid=request.getParameter("userid"); String bid=request.getParameter("bid"); if(userid!=null && bid!=null && userid.length()>0 && bid.length()>0){ service=new FbbServiceClient(); SnapService.Client client=service.open(); SnapItem item=client.getItemByIdS(Long.valueOf(userid),Long.valueOf(bid)); //进行转换 if(item.getUserName()!=null && item.getUserName().length()>0) item.setUserName(converter.convert(20,20,imgpath,item.getUserName())); if(item.getItemName()!=null && item.getItemName().length()>0) item.setItemName(converter.convert(20,20,imgpath,item.getItemName())); request.setAttribute("SnapItem", item); request.getRequestDispatcher("/wxshare.jsp").forward(request, response); } } catch (Exception e) { e.printStackTrace(); logger.error("errorcode ::: " + e.getMessage(), e); }finally{ if(service!=null) service.close(); } } }
4.写成一个ELfunction 在jsp EL 表达式中 使用
package com.fanbaobao.util; import com.fanbaobao.util.EmojiConverter.Type; public class EmojiFunction { private static EmojiConverter converter; private static String imgpath="http://xx.xxxx.com/opt/siteimg/mika/emoji/unicode/"; static{ converter = new EmojiConverter.Builder() .from(Type.UNICODE) .to(Type.SOFTBANK) .build(); } public static String emoji(String arg){ return emojiFun(null,null,arg); } public static String emojiFun(Integer width,Integer height,String arg){ if(width==null){ width=20; } if(height==null){ height=20; } return converter.convert(width.intValue(),height.intValue(),imgpath,arg); } }
5;编写 tld文件
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>mk</short-name> <uri>/mikadata-tags</uri> <function> <name>emoji</name> <function-class>com.fanbaobao.util.EmojiFunction</function-class> <function-signature> java.lang.String emoji(java.lang.String) </function-signature> </function> <function> <name>emojiFun</name> <function-class>com.fanbaobao.util.EmojiFunction</function-class> <function-signature> java.lang.String emojiFun(java.lang.Integer,java.lang.Integer,java.lang.String) </function-signature> </function> </taglib>
6:jsp中使用
<%@ taglib uri="/mikadata-tags" prefix="mk"%> <td>${mk:emoji(dataObject.comment)}</td>
评论
6 楼
白天看黑夜
2017-10-31
java过滤emoji字符处理,希望能帮到你
http://www.itmayun.com/it/files/226631678709806/article/406117164733730/1.html
http://www.itmayun.com/it/files/226631678709806/article/406117164733730/1.html
5 楼
javer
2016-05-09
naiyizute 写道
编码表好像不全,能提供全一点的吗
https://raw.githubusercontent.com/googlei18n/emoji4unicode/master/data/emoji4unicode.xml 这里是官方的最全的代码,如果没更新,那也没办法了,只能自己添加了
4 楼
javer
2016-05-09
你这个 EmojiConverter 是来自这里吧,一个日本人写的 https://github.com/binarywang/emoji-converter/tree/master/src/main/java/u1tnk
3 楼
blankstar
2016-03-14
亲测能用..真棒..多谢 多谢....解决了.
2 楼
lxj_717
2015-07-17
1 楼
naiyizute
2015-01-16
编码表好像不全,能提供全一点的吗
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 938public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2225经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5589package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 909import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1015/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 951//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1779更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1368import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 775import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2362import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 876// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1128import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 761import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1107import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3841import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 923/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 974import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1794Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 963/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2168package out; import ja ...
相关推荐
editor.md中使用的github emoji 离线表情包图片,用于解决无法加载的问题
照片和表情符号的混合编辑当前有很多提供emoji表情的编辑器:一类编辑器提供的功能很简单,仅能输入文字和emoji标记(如:$ apple $);还有一种编辑器功能很强大,大多用在pc端,可以呢,没有搜索到比较好用的,能...
支持文本代码,多人艾特,emoji表情,微信表情等,全面解决收发消息、昵称内的emoji表情等特殊字符显示问题。 区别 DaenWxHook是DLL,可以直接注入到微信中,提供HTTPAPI接口,不同的语言,难点在于注入的方式,...
有两个主要功能:1)将现有的表情符号格式的文本扩展为实际的表情符号,例如将`:parrot:`变成实际上看起来并不像鹦鹉的丑陋的小东西,以及2)搜索并插入丰富的表情符号内容,是否意味着指向emoji表情网址的链接,...
语音,动态emoji,相册相机图片(仿QQ和微信图片显示),解决4.4前后相册兼容性问题
图文混排,超链接,下划线的UGUI解决方案 支持: * 图集动态表情 * 动态加载图片 * 超链接 * 下划线效果 * 自定义加载动画或特效 除动态加载图片,整体只有1个DrawCall 图中4个DC:Unity本身1个,文本整体只有1个,...
升级hexo4.2.0后pwa无法使用, 解决方法看下面。 2020.11.12 解决在IOS设备Safari浏览器上布局错乱问题 2020.10.31 本地化支持 取消缓存head.ejs,解决浏览器顶部Tab卡片中名称错误 优化分享功能 2020-6-20 文章置顶 ...
用于解决在微信小程序中Markdown、HTML不能直接... 支持emoji表情wink 支持上标、下标、下划线、删除线、表格、视频、图片(几乎所有html元素)…… 支持typographer字符替换 多主题动态支持 极致的中文排版优化
Emoji:支持大部分主流 Emoji 表情,快捷键自动补全 数学公式:支持 LaTex 数学公式渲染 数据暂存:支持本地浏览器暂存数据,避免意外情况导致编辑内容丢失 智能、灵活的信息架构 传统的节点式社区要求帖子...
10.2 QQ表情和Emoji表情 290 10.3 微信版本及手机系统 293 10.4 Weixin JS接口 295 10.5 发送给朋友与分享到朋友圈 297 10.6 Discuz微社区 299 附录A 关键词自动回复的规则 300 附录B 微信公众平台全局返回码...
10.2 QQ表情和Emoji表情 290 10.3 微信版本及手机系统 293 10.4 Weixin JS接口 295 10.5 发送给朋友与分享到朋友圈 297 10.6 Discuz微社区 299 附录A 关键词自动回复的规则 300 附录B 微信公众平台全局返回码...
如还有什么疑问,请联系作者询问,在服务范围内能解决的都会解决的。 3 .作者QQ1785987556 一般很少在线,如不在线请留言。 【配置信息修改说明】 1.打开机器人主程序,在主程序左上方找到选择设置,在分目录...
和新浪微博类似的微博系统,支持文字、表情、图片、短视频、附件、@、话题,满足用户的交流需求,可以用于任何场景。 微吧(论坛) 结合贴吧论坛圈子等模式的核心点,打造的请论坛系统,圈子化有效资源充分利用,...
和新浪微博类似的微博系统,支持文字、表情、图片、短视频、附件、@、话题,满足用户的交流需求,可以用于任何场景。 微吧(论坛) 结合贴吧论坛圈子等模式的核心点,打造的请论坛系统,圈子化有效资源充分利用,...