java 处理emoji表情

public class EmojiUtil {
	/**
	 * 将str中的emoji表情转为byte数组
	 * 
	 * @param str
	 * @return
	 */
	public static String resolveToByteFromEmoji(String str) {
		Pattern pattern = Pattern
				.compile("[^(\u2E80-\u9FFF\\w\\s`[email protected]#\\$%\\^&\\*\\(\\)_+-?()——=\\[\\]{}\\|;。,、《》”:;“!……’:‘\"<,>\\.?/\\\\*)]");
		Matcher matcher = pattern.matcher(str);
		StringBuffer sb2 = new StringBuffer();
		while (matcher.find()) {
			matcher.appendReplacement(sb2, resolveToByte(matcher.group(0)));
		}
		matcher.appendTail(sb2);
		return sb2.toString();
	}

	/**
	 * 将str中的byte数组类型的emoji表情转为正常显示的emoji表情
	 * 
	 * @param str
	 * @return
	 */
	public static String resolveToEmojiFromByte(String str) {
		Pattern pattern2 = Pattern.compile("<:([[-]\\d*[,]]+):>");
		Matcher matcher2 = pattern2.matcher(str);
		StringBuffer sb3 = new StringBuffer();
		while (matcher2.find()) {
			matcher2.appendReplacement(sb3, resolveToEmoji(matcher2.group(0)));
		}
		matcher2.appendTail(sb3);
		return sb3.toString();
	}

	private static String resolveToByte(String str) {
		byte[] b = str.getBytes();
		StringBuffer sb = new StringBuffer();
		sb.append("<:");
		for (int i = 0; i < b.length; i++) {
			if (i < b.length - 1) {
				sb.append(Byte.valueOf(b[i]).toString() + ",");
			} else {
				sb.append(Byte.valueOf(b[i]).toString());
			}
		}
		sb.append(":>");
		return sb.toString();
	}

	private static String resolveToEmoji(String str) {
		str = str.replaceAll("<:", "").replaceAll(":>", "");
		String[] s = str.split(",");
		byte[] b = new byte[s.length];
		for (int i = 0; i < s.length; i++) {
			b[i] = Byte.valueOf(s[i]);
		}
		return new String(b);
	}
}
时间: 2024-10-10 13:18:13

java 处理emoji表情的相关文章

Java过滤emoji表情,找出emoji的unicode范围。

/** * 过滤Emoji表情 * @author Kunjie * 2015年7月17日 */ public class EmojiFilter { public static void main(String[] args) { System.out.println(filter("啊阿萨德发秦莞尔")); } public static String filter(String str){ if(str == null || str.l

Java 解决Emoji表情过滤问题

Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错. 原因: UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 方法1.将已经建好的表也转换成utf8mb4 2,写个工具类:过滤掉emoji表情符号 public class EmojiFilter { private static boolean isEmojiCharacter(char codePoint) { return (codePoint =

JAVA过滤emoji表情包

package com.xw.paintheart.utils; import org.apache.commons.lang.StringUtils; public class EmojiFilterUtils { private static boolean isEmojiCharacter(char codePoint) { return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint

java代码过滤emoji表情

可以新建一个过滤器的类,在类中书写如下代码: public static String filterEmoji(String source) {           if(source != null)          {              Pattern emoji = Pattern.compile ("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNIC

【异常处理】Incorrect string value: &#39;\xF0\x90\x8D\x83...&#39; for column... Emoji表情字符过滤的Java实现

Emoji表情字符现在在APP已经广泛支持了.但是Mysql的UTF8编码对Emoji字符的支持却不是那么好.所以我们经常会遇到这样的异常: Incorrect string value: '\xF0\x90\x8D\x83...' for column 原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节. 解决的方案有两种: 1.使用utf8mb4的mysql编码来容纳这些字符. 2.过滤掉这些特殊的表情字符. 关于

Java在mysql中存储emoji表情

mysql存储emoji表情要使用utf8mb4字符集,这是4字节存储,最低支持版本为5.5.3+,若不是,请升级到较新版本. 修改mysql配置文件 Window目录: mysql/my.ini Ubuntu16.04目录: /etc/mysql/conf.d/mysql.cnf  配置Client /etc/mysql/mysql.conf.d/mysql.cnf  配置Server 其他目录: 一般在etc/mysql/my.cnf 在mysql配置文件添加以下三部分内容: [client

mysql 支持emoji表情

在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column 'content' at row 原因是当前mysql的字符集为utf-8,最多3个字节,emoji表情需要4个字节来表示.所以导致insert报错. 一般的方法是将字符集改为utf8mb4 2. utf8mb4这样的字符集需要mysql 5.5才支持,当时我的版本微5.1,所以自己去官网下了5.6的

mysql保存emoji表情(微信开发用户昵称..)

  java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) at com.mysql.jdbc.MysqlIO.

mysql utf8mb4与emoji表情[转]

MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters这里看,基本就是0000-FFFF这一区. 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集. utf8mb4 is a superset of utf8 utf8mb4兼容utf8,且比utf8