emoji表情存储

近期做朋友圈功能的时候,需要支持emoji表情评论存储。有两种方式:1.修改mysql数据字符集;2.java过滤过滤emoji表情,进行转码,之后在存入数据库;

1.修改mysql数据字符集

mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。所以把数据库编码改成utf8mb4;

修改字符集,参考:http://blog.csdn.net/u013145194/article/details/51527389

2.Java过滤过滤emoji表情,进行转码,之后在存入数据库


import org.apache.commons.lang.StringUtils;

public class EmojiUtils {

/**

* 将Unicode字符转成中文

*

* @param src

* @return

*/

public static String unicode2Emoji(String src) {

if (StringUtils.isEmpty(src)) {

return "";

}

StringBuffer retBuf = new StringBuffer();

int maxLoop = src.length();

for (int i = 0; i < maxLoop; i++) {

if (src.charAt(i) == '\\') {

if ((i < maxLoop - 5) && ((src.charAt(i + 1) == 'u')

|| (src.charAt(i + 1) == 'U'))) {

try {

retBuf.append((char) Integer

.parseInt(src.substring(i + 2, i + 6), 16));

i += 5;

} catch (NumberFormatException localNumberFormatException) {

retBuf.append(src.charAt(i));

}

} else {

retBuf.append(src.charAt(i));

}

} else {

retBuf.append(src.charAt(i));

}

}

return retBuf.toString();

}

/**

* 将字符串中的Emoji表情转换成Unicode编码

*

* @param src

* @return

*/

public static String emoji2Unicode(String src) {

StringBuffer unicode = new StringBuffer();

for (int i = 0; i < src.length(); i++) {

char c = src.charAt(i);

int codepoint = src.codePointAt(i);

if (isEmojiCharacter(codepoint)) {

unicode.append("\\u").append(Integer.toHexString(c));

} else {

unicode.append(c);

}

}

return unicode.toString();

}

/**

* 判断是否包含Emoji符号

*

* @param codePoint

* @return

*/

public static boolean isEmojiCharacter(int codePoint) {

return (codePoint >= 0x2600 && codePoint <= 0x27BF) // 杂项符号与符号字体

|| codePoint == 0x303D || codePoint == 0x2049

|| codePoint == 0x203C

|| (codePoint >= 0x2000 && codePoint <= 0x200F)//

|| (codePoint >= 0x2028 && codePoint <= 0x202F)//

|| codePoint == 0x205F //

|| (codePoint >= 0x2065 && codePoint <= 0x206F)//

/* 标点符号占用区域 */

|| (codePoint >= 0x2100 && codePoint <= 0x214F)// 字母符号

|| (codePoint >= 0x2300 && codePoint <= 0x23FF)// 各种技术符号

|| (codePoint >= 0x2B00 && codePoint <= 0x2BFF)// 箭头A

|| (codePoint >= 0x2900 && codePoint <= 0x297F)// 箭头B

|| (codePoint >= 0x3200 && codePoint <= 0x32FF)// 中文符号

|| (codePoint >= 0xD800 && codePoint <= 0xDFFF)// 高低位替代符保留区域

|| (codePoint >= 0xE000 && codePoint <= 0xF8FF)// 私有保留区域

|| (codePoint >= 0xFE00 && codePoint <= 0xFE0F)// 变异选择器

|| codePoint >= 0x10000; // Plane在第二平面以上的,char都不可以存,全部都转

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先补习一下Unicode 与 UTF-8的历史演变过程 http://www.jianshu.com/p/ab0d...
    爱蛇阅读 7,929评论 0 1
  • 1、问题:mysql 遇到某些中文插入异常最近有同学反馈了这样一个问题: 上述语句在脚本中 load 入库的时候会...
    kanasu阅读 7,969评论 1 4
  • https://my.oschina.net/wingyiu/blog/153357 MYSQL 5.5 之前, ...
    爱蛇阅读 7,706评论 0 0
  • 电影 帕特森 :一个会写诗的公交车司机。喜欢这样的电影,缓缓的,散发着我所向往的生活的味道。 世界旦夕之间…和异次...
    encoreMiao阅读 1,108评论 0 0
  • 刚刚送走了L先生,还是有些不舍得的。 昨天L先生说,我回去了,可不要想我哟!我当时是怎么说的?我说我觉得好兴奋啊!...
    素白林阅读 3,355评论 2 7

友情链接更多精彩内容