亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

emoji 表情圖片解決方法

系統(tǒng) 1952 0
1:先弄到圖片 上傳到服務(wù)器上


emoji 表情圖片解決方法

2.下載 unicode 和 表情 映射關(guān)系xml
?? emoji4unicode.xml? 在下面的rar 中

3.加入這個一個 轉(zhuǎn)換類
    
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.調(diào)用 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));
				//進(jìn)行轉(zhuǎn)換
				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 表達(dá)式中 使用
    
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>

  

emoji 表情圖片解決方法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99热久久这里只有精品99 | 一级毛片中文字幕 | 日韩99精品 | 四虎影视免费在线 | 日韩一区二区超清视频 | 日本精品视频网站 | 成人免费a视频 | 国产综合色香蕉精品五月婷 | 爱操综合| 久久青草18免费观看网站 | 国产精品人成人免费国产 | 日产国产欧美视频一区精品 | 久久成 | 国产福利区一区二在线观看 | 精品香蕉一区二区三区 | 国产美女亚洲精品久久久久久 | 午夜精品久久久久久久久 | 91精品久久久久久久久久 | 成人看片免费无限观看视频 | 久久国产精品一国产精品金尊 | 亚洲五月花 | 久久99国产精品久久99 | 香蕉一区二区三区观 | 九九九视频 | 美国黑人特大一级毛片 | 中文视频在线观看 | 国产精品成人免费 | 欧美刺激午夜性久久久久久久 | 国产精品自拍视频 | 欧美成人三级视频 | 日本三级中文 | 国产亚洲精| 欧美曰批人成在线观看 | 亚洲精品毛片久久久久久久 | 香蕉成人国产精品免费看网站 | 99热在这里只有免费精品 | 超级碰碰青草免费视频92 | 97视频久久| 九七97影院理论片手机在线观看 | 在线观看视频一区二区 | 天天干天天操天天操 |