把數據庫升級,用mysql5.5以上的。字符集改爲utf8mb4 -- UTF-8 java
第二種方法就是將表情進行過濾:mysql
package chan.ye.dai.utils; import org.apache.commons.lang.StringUtils; public class EmojiFilter { /** * 檢測是否有emoji字符 * @param source * @return 一旦含有就拋出 */ public static boolean containsEmoji(String source) { if (StringUtils.isBlank(source)) { return false; } int len = source.length(); for (int i = 0; i < len; i++) { char codePoint = source.charAt(i); if (isEmojiCharacter(codePoint)) { //do nothing,判斷到了這裏代表,確認有表情字符 return true; } } return false; } private static boolean isEmojiCharacter(char codePoint) { return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); } /** * 過濾emoji 或者 其餘非文字類型的字符 * @param source * @return */ public static String filterEmoji(String source) { if (!containsEmoji(source)) { return source;//若是不包含,直接返回 } //到這裏鐵定包含 StringBuilder buf = null; int len = source.length(); for (int i = 0; i < len; i++) { char codePoint = source.charAt(i); if (isEmojiCharacter(codePoint)) { if (buf == null) { buf = new StringBuilder(source.length()); } buf.append(codePoint); } else { } } if (buf == null) { return source;//若是沒有找到 emoji表情,則返回源字符串 } else { if (buf.length() == len) {//這裏的意義在於儘量少的toString,由於會從新生成字符串 buf = null; return source; } else { return buf.toString(); } } } }