`

(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应用的...

    通用emoji表情包与JSON

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

    微信emoji表情包.rar

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

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

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

    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 图片大全,unicode作为文件名

    标签“emoji图片”、“unicode”、“emoji”进一步确认了这个压缩包的内容,其中“emoji图片”是主要资源,“unicode”强调了文件命名方式,而“emoji”则再次提及这是与表情符号相关的素材。 在压缩包子文件的文件...

Global site tag (gtag.js) - Google Analytics