`

(emoji表情) unicode5与unicode6互换

    博客分类:
  • java
 
阅读更多
import java.io.IOException;
import java.io.InputStream;
import java.lang.Character.UnicodeBlock;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
/**
 * @ClassName: EmojiUtil
 * @Description:unicode5与unicode6转换(emoji表情)
 *              对照文件:emoji.properties
 * @author xiaoweiwan
 * @date Jun 28, 2012
 */
public class EmojiUtil {
		private static EmojiUtil _instance;
	private static Properties prop;
	private static Properties propValue;
	private static final int MIN_UNICODEFIVE = Integer.parseInt("E001",16);
	private static final int MAX_UNICODEFIVE = Integer.parseInt("E536",16);
	
	private static final int MIN_UNICODESIX = Integer.parseInt("1F004",16);
	private static final int MAX_UNICODESIX = Integer.parseInt("1F6C0",16);
	
	static{
		InputStream stream = EmojiUtil.class.getClassLoader().getResourceAsStream("emoji.properties");
		prop = new Properties();
		propValue = new Properties();
		try {
			prop.load(stream);
			for (Iterator iter = prop.entrySet().iterator(); iter.hasNext();) {
	 		    Map.Entry<String,String> entry = (Map.Entry) iter.next();
	 		    String unicode5 = (String)entry.getKey();
	 		    String unicode6 = (String)entry.getValue();
	 		    propValue.put(unicode6, unicode5);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static EmojiUtil getInstance(){
		if(_instance == null){
			synchronized (EmojiUtil.class) {
				_instance = new EmojiUtil();
			}
		}
		return _instance;
	}
	
	
	/**
	 * @Title: changeUnicodeFiveToSix
	 * @Description: 使字符串编码如果是Unicode5的emoji字符则转为Unicode6输出
	 * @param name
	 * @return
	 */
	public String changeUnicodeFiveToSix(String name)  {
	   String realname = name;   
	   try{    
		   char[] charArr = name.toCharArray();        
		   StringBuffer sb = new StringBuffer();
		   int i = 0;
	       while(i<charArr.length){
	            char ch = charArr[i];
	            int unicodeIntVale = 0;
	            if(Character.isHighSurrogate(ch)){
	            	unicodeIntVale = Character.toCodePoint(ch, charArr[i+1]);
	            }else{
	            	unicodeIntVale = (int)ch;
	            }
            	if( (unicodeIntVale>=MIN_UNICODEFIVE) && (unicodeIntVale<=MAX_UNICODEFIVE) ){
            		String hexBase = Integer.toHexString(unicodeIntVale).toUpperCase();
            		
            		String trans = prop.getProperty("\\u"+hexBase);
            		if(trans!=null){
            			int second = trans.indexOf("\\u", 2);
            			if(second<0){
            				second = trans.indexOf("0x", 2);
            			}
            			if(second>0){
            				sb.append(Character.toChars(Integer.parseInt(trans.substring(0,second).replaceFirst("\\\\u", "").replaceFirst("0x", ""),16)));
            				sb.append(Character.toChars(Integer.parseInt(trans.substring(second).replaceFirst("\\\\u", "").replaceFirst("0x", ""),16)));
            			}else{
            				sb.append(Character.toChars(Integer.parseInt(trans.replaceFirst("\\\\u", "").replaceFirst("0x", ""),16)));
            			}
            		}else{
            			sb.append(Character.toChars(unicodeIntVale));
            		}
            	}else{
            		sb.append(Character.toChars(unicodeIntVale));
            	}
	            if(Character.isHighSurrogate(ch)){
	            	 i = i + 2;
	            	 continue;
	            }
	            else{
	                i = i + 1;
	            }
	        }
		   realname = sb.toString();         
		   }catch(Exception e)   {  
			   e.printStackTrace();  
	    }    
	    return realname;  
	}
	/**
	 * @Title: changeUnicodeSixToFive
	 * @Description: 使字符串编码如果是Unicode6的emoji字符则转为Unicode5输出
	 * @param name
	 * @return
	 */
	public String changeUnicodeSixToFive(String name)  {
		   String realname = name;   
		   try{    
			   char[] charArr = name.toCharArray();        
			   StringBuffer sb = new StringBuffer();
			   int i = 0;
		       while(i<charArr.length){
		            char ch = charArr[i];
		            int unicodeIntVale = 0;
		            if(Character.isHighSurrogate(ch)){
		            	unicodeIntVale = Character.toCodePoint(ch, charArr[i+1]);
		            }else{
		            	unicodeIntVale = (int)ch;
		            }
	            	if( (unicodeIntVale>=MIN_UNICODESIX) && (unicodeIntVale<=MAX_UNICODESIX) ){
	            		String hexBase = Integer.toHexString(unicodeIntVale).toUpperCase();
	            		String trans = propValue.getProperty("0x"+hexBase);
	            		if(trans!=null){
	            			sb.append(Character.toChars(Integer.parseInt(trans.replaceFirst("\\\\u", ""),16)));
	            		}else{
	            			sb.append(Character.toChars(unicodeIntVale));
	            		}
	            	}else{
	            		sb.append(Character.toChars(unicodeIntVale));
	            	}
	            	if(Character.isHighSurrogate(ch)){
	            		 i = i + 2;
		                    continue;
	            	}else{
		                i = i + 1;
		            }
		       }
			   realname = sb.toString();         
			   }catch(Exception e)   {    
				   e.printStackTrace();  
		    }    
		    return realname;  
	}
	
	 public static String utf8ToUnicode(String inStr) {
	        char[] myBuffer = inStr.toCharArray();
	        
	        StringBuffer sb = new StringBuffer();
	        for (int i = 0; i < inStr.length(); i++) {
	         UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]);
	            if(ub == UnicodeBlock.BASIC_LATIN){
	             sb.append(inStr);
	            }else if(ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){
	             int j = (int) myBuffer[i] - 65248;
	             sb.append((char)j);
	            }else{
	            	int s = (int) myBuffer[i];
//	            	System.out.println(s);
	            	if(s<0)
	            		s = s+2^32;
	                String hexS = Integer.toHexString(s);
	                String unicode = "\\u"+hexS.toUpperCase();
	                sb.append(unicode);
	            }
	        }
	        return sb.toString();
	 }
	
}
分享到:
评论
2 楼 qxjandyc 2014-08-05  
hjjjjjjjjjjjjjjjjjjjjjj
1 楼 一个人旅行 2013-02-21  
写的不错哦

相关推荐

    (emoji表情) unicode5与unicode5互换.zip

    这个压缩包"emoji unicode5与unicode5互换.zip"可能包含与处理Unicode 5版本中的emoji表情相关的内容,尤其是关于如何在不同的Unicode 5版本之间转换这些表情的资料。 首先,我们需要理解什么是Unicode。Unicode是...

    emoji表情unicode数据库

    emoji表情unicode数据库

    处理emoji表情 js unicode转码解码方法封装类,自己项目中使用的东西

    处理emoji表情 js unicode转码解码方法封装类,自己项目中使用的东西 处理emoji表情 js unicode转码解码方法封装类,自己项目中使用的东西

    安卓端H5页面的emoji表情显示处理

    在安卓端开发H5页面时...总之,处理Android端H5页面的emoji表情,关键在于理解emoji的Unicode编码和跨平台显示问题,通过适当的编码解码策略,结合JavaScript工具类或第三方库,可以确保emoji在不同环境下的正确显示。

    emoji图片资源和表情unicode编码

    这个名为"emoji图片资源和表情unicode编码"的压缩包文件包含了一系列与emoji相关的资源,特别是不同操作系统下的表情图片以及它们对应的Unicode编码。 首先,我们要理解什么是Unicode。Unicode是一种国际标准,用于...

    emoji表情的unicode数据库

    一个用于管理Android使用的unicode的emoji表情的SQLite数据库

    部分emoji表情的unicode编码数据库

    部分emoji表情的unicode编码数据库

    免费emoji包 unicode

    5. **表情键盘**:可以开发一个自定义的表情键盘组件,让用户在输入框中直接选择和发送emoji。 总之,这个“免费emoji包 unicode”为开发者提供了一套完整的、基于Unicode编码的emoji资源,有助于提升Android应用的...

    Unity开发对Emoji表情包图文混排进行处理显示(支持大多数表情)

    在Unity游戏开发中,涉及到与用户交互的界面时,经常需要处理文本输入,其中包括了越来越多的用户喜欢使用的Emoji表情。本文将深入探讨如何在Unity中处理Emoji表情包,实现图文混排的显示,并确保对大多数表情的支持...

    通用emoji表情包与JSON

    这个主题“通用emoji表情包与JSON”涉及到如何将emoji集成到应用程序中,特别是利用JSON数据格式来存储和处理这些表情。下面将详细讨论相关知识点。 首先,我们来看**JSON(JavaScript Object Notation)**。JSON是...

    微信emoji表情包.rar

    在微信中,用户可以通过输入特定的关键词触发相应的emoji表情,这些关键词通常与表情的形象或含义相关。此外,微信还提供了自定义表情包功能,用户可以下载或制作个人化的GIF动图,进一步丰富聊天体验。 在技术层面...

    Java Emoji Converter表情转换工具

    6. **API集成**:Java Emoji Converter可能提供一套简单的API,使得开发者能够轻松地将其集成到自己的应用中,进行实时的Emoji转换。 7. **错误处理**:当遇到无法识别或转换的Emoji时,工具会提供适当的错误处理...

    emoji表情png图片

    在IT行业中,emoji表情已经成为日常交流和在线沟通的重要组成部分,特别是在移动设备和Web应用上。本文将详细讨论“emoji表情png图片”相关的知识点,包括它们的格式、用途、跨平台兼容性以及如何在不同系统中使用。...

    java解析emoji表情存入oracle,并正常使用

    Oracle数据库系统在设计之初并未考虑对Unicode扩展区域的全面支持,因此默认情况下无法直接存储和检索emoji表情。Java作为一种广泛使用的编程语言,可以作为解决这一问题的桥梁。本文将深入探讨如何通过Java解析...

    Emoj表情+Unicode编码库.zip

    在IT领域,尤其是在文本处理和编程中...综上所述,"Emoj表情+Unicode编码库.zip"提供的数据对于理解并处理Emoji编码具有重要意义,它可以帮助开发者更好地应对与Emoji相关的编码问题,提高应用程序的兼容性和用户体验。

    非常全的emoji基本表情包

    "非常全的emoji基本表情包"提供了一个全面的资源库,包含了735个基本的emoji表情,这对于开发者来说是极具价值的工具。 首先,我们来深入了解一下emoji。Emoji是由日本电信公司NTT DoCoMo在1990年代初发明的,最初...

    android 输入框EditText禁止输入Emoji表情符

    总的来说,禁止EditText输入Emoji表情符主要涉及到字符的Unicode检测、监听输入事件以及可能的正则匹配。在实际开发中,可以根据项目需求和性能考虑选择合适的方法。同时,也要注意,禁用Emoji输入可能会降低用户...

    2020年抖音官方emoji表情

    抖音,作为全球知名的短视频分享平台,其用户互动性极高,其中不可或缺的就是丰富的表情符号,即emoji。2020年抖音官方推出的emoji表情包,旨在为用户提供更多个性化、趣味性的表达方式,增强用户间的交流体验。这些...

    通过jQuery实现的仿QQ Emoji表情包H5插件

    【jQuery实现的仿QQ Emoji表情包H5插件】是一种基于JavaScript库jQuery的网页组件,主要用于在Web聊天或社交应用中实现类似QQ的表情输入功能。这个插件利用HTML、CSS和JavaScript技术,使得用户能够在输入框中方便地...

    微信Emoji表情带文件名149个打包.zip

    在编程中,处理Unicode字符集,尤其是Unicode中的Emoji部分(U+1F600至U+1F64F,U+1F680至U+1F6FF等),是常见的需求。开发者可能需要使用特定的库或函数来确保表情在不同的操作系统和设备上正确显示。 此外,对于...

Global site tag (gtag.js) - Google Analytics