- 浏览: 1592366 次
- 来自: 上海
文章分类
- 全部博客 (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 1007public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2285经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5665package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 1007import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1057/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1014//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1828更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1420import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 820import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2401import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 927// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1176import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 806import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1150import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3897import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 970/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1027import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1843Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1013/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2235package out; import ja ...
相关推荐
在Unity游戏开发中,涉及到与用户交互的界面时,经常需要处理文本输入,其中包括了越来越多的用户喜欢使用的Emoji表情。本文将深入探讨如何在Unity中处理Emoji表情包,实现图文混排的显示,并确保对大多数表情的支持...
在Web开发中,emoji表情已经成为用户交流不可或缺的一部分,特别是在社交网络和聊天应用中。iOS和Android设备用户在输入时会使用各自平台特定的emoji表情符号,这些符号在不同的操作系统和浏览器上可能显示不一致,...
editor.md中使用的github emoji 离线表情包图片,用于解决无法加载的问题
在Android平台上进行应用开发时,Emoji表情的使用已经成为不可或缺的一部分,因为它们能够为用户提供更加生动、直观的交流方式。为了确保在不同设备上提供一致的用户体验,开发者需要关注"Android Emoji表情开发"这...
在微信开发过程中,有时我们需要在网页上展示用户发送的emoji表情,这为沟通增添了丰富的表现力。本教程将详细介绍如何在网页中正确显示这些表情,让用户体验更加生动有趣。 首先,我们要理解emoji表情的本质。它们...
如果是自定义图片,可能需要额外的处理,例如使用SpannableString和ImageSpan来显示表情图片。 4. **优化用户体验** - 为了提供与微信类似的体验,可以添加滑动手势来切换表情页,这需要监听滑动事件并更新当前...
【jQuery实现的仿QQ ...总的来说,"通过jQuery实现的仿QQ Emoji表情包H5插件"是一个综合运用了前端多种技术的实用组件,它提高了用户在Web聊天中的互动性和趣味性,同时也为开发者提供了一个灵活、易用的解决方案。
总的来说,"emoji表情包转换插件"通过JavaScript技术,解决了网页上emoji图片显示不一致的问题,提升了网页的跨平台兼容性和用户体验。对于前端开发者来说,理解和应用这样的插件有助于创建更友好、更互动的网页应用...
在IT行业中,尤其是在Web开发领域,"emoji表情插件"是一个常见的工具,它极大地丰富了用户的在线交流体验。本文将详细解析这个主题,探讨表情插件的重要性和具体应用,以及如何在项目中集成和使用此类插件。 首先,...
**jQuery实现的Emoji表情选择器** 在Web开发中,为了增强用户交互体验,尤其是在社交、评论等场景下,经常需要引入emoji表情。`jQuery-emoji-picker`是一个方便的插件,它可以帮助开发者轻松地实现在前端应用中添加...
在Android项目中集成和使用Emoji表情是一个常见的需求,特别是在社交应用、聊天软件或者任何需要用户表达情感的场景中。这个资源包提供了在Android项目中实现Emoji功能的源代码,可以帮助开发者快速实现这一功能。 ...
本文将深入探讨如何在Android项目中实现emoji表情的集成,包括基本原理、关键步骤以及可能遇到的问题和解决方案。 首先,我们需要理解emoji表情在Android系统中的表现形式。在Android上,emoji通常是以Unicode编码...
这个工具的目的是帮助开发者解决在处理含有Emoji的文本时遇到的兼容性挑战。 在Java编程语言中,处理Emoji可能会涉及到Unicode编码、字体映射以及平台特定的实现。Java Emoji Converter提供了一个统一的接口,允许...
为了解决这一问题,文章介绍了三种处理emoji表情的方法: 方法一:使用utf8mb4字符集 utf8mb4是MySQL提供的一个字符集,它能够支持最多四个字节的UTF-8编码,这样就能够兼容emoji表情的编码。如果MySQL的版本是...
4. **数据结构与编码**:emoji表情通常有两种表示方式:Unicode编码和图片资源。为了便于处理,我们可以创建一个数据结构(如`HashMap`)来存储emoji的Unicode和对应的图片资源ID。这样,在用户输入时,我们可以根据...
在Android开发中,为了增强应用的交互性和用户体验,经常需要集成自定义的Emoji表情控件。这个主题将深入探讨如何在Android中实现这样一个功能。首先,我们从标题"android中自定义Emoji表情控件"来看,它涉及到的是...
本文将深入探讨如何在Android应用中集成和使用emoji表情,以实现一个类似聊天功能的完整解决方案。 首先,我们需要理解emoji表情的来源。Unicode标准包含了数千个emoji字符,这些字符被编码为特定的Unicode码点。...
在Android平台上,开发人员经常需要处理用户输入的文本,其中包括了常见的Emoji表情。这些表情能够丰富用户的交流体验,尤其在社交应用或者聊天软件中尤为重要。本文将深入探讨如何在Android应用中实现对Emoji表情的...