Emoji表情過濾

首先,看一下unicode10中的新版emoji表情包(連接),一共有1600+款表情,html

通過分析,新增長的表情基本都是兩個或者更多unicode碼,因而將以上表情包中的html文件下載下來進行解析,並輸出成java的map,代碼基本格式以下java

map.put("😀", "U+1F600");
map.put("😁", "U+1F601");
map.put("😂", "U+1F602");
map.put("😃", "U+1F603");
map.put("😄", "U+1F604");
map.put("😅", "U+1F605");
map.put("😆", "U+1F606");

通過對錶情的unicode進行不一樣編碼格式的分析,發現兩個unicode以上的表情的16進制基本都是以/F0開頭,決定拿這些開刀
app

/** 
	 * 字符串轉換成十六進制字符串
	 * @param String str 待轉換的ASCII字符串
	 * @return String 每一個Byte之間/分隔,如: [/61/6C/6B]
	 */  
    public static String str2HexStr(String str)
    {  
        char[] chars = "0123456789ABCDEF".toCharArray();  
        StringBuilder sb = new StringBuilder("");
        byte[] bs = str.getBytes();  
        int bit;  
        
        for (int i = 0; i < bs.length; i++)
        {  
        	sb.append('/');
            bit = (bs[i] & 0x0f0) >> 4;  
            sb.append(chars[bit]);  
            bit = bs[i] & 0x0f;  
            sb.append(chars[bit]);
        }  
        return sb.toString().trim();  
    }

將其轉化成字符串以後
ui

while(resultStr.indexOf("/F0") != -1){
			resultStr = resultStr.replace(resultStr.substring(resultStr.indexOf("/F0"), resultStr.indexOf("/F0") + 12), "/3F");
		}
		resultStr = resultStr.replace("/", "");
		System.out.println(resultStr);

將/F0後面的四個16進制的轉化成/3F,即「?」;編碼

而後再講替換以後的16進制字符串轉化成正常的字符串spa

    /** 
     * 十六進制轉換字符串
	 * @param String str Byte字符串(Byte之間無分隔符 如:[616C6B])
	 * @return String 對應的字符串
     */  
    public static String hexStr2Str(String hexStr)
    {  
        String str = "0123456789ABCDEF";  
        char[] hexs = hexStr.toCharArray();  
        byte[] bytes = new byte[hexStr.length() / 2];  
        int n;  

        for (int i = 0; i < bytes.length; i++)
        {  
            n = str.indexOf(hexs[2 * i]) * 16;  
            n += str.indexOf(hexs[2 * i + 1]);  
            bytes[i] = (byte) (n & 0xff);  
        }  
        return new String(bytes);  
    }

運行結果以下圖.net

code下載地址:http://download.csdn.net/detail/pan_shuyang/9465438code

相關文章
相關標籤/搜索