java對Emoji表情的兩種處理方式
阿新 • • 發佈:2018-12-14
最近在做一個APP,第三方登入的時候暱稱表情儲存報錯,
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98...' for column 'nick_name' at row 1
我對資料庫的編碼,表格的編碼,欄位的編碼,my.ini配置檔案都進行了修改,將utf8改成了utf8mb4,還是不行,所以我放棄了這種方式,取而代之的有如下兩種方案
1.在存值取值的時候做處理
import org.apache.commons.codec.binary.Base64; public String getNickname() { try { nickName = new String(Base64.decodeBase64(nickname), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return nickName; } public void setNickname(String nickname) { try { nickname = Base64.encodeBase64String(nickname.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } this.nickname = nickname; }
2.沒辦法的辦法,將所有Emoji過濾成其他字元
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Description * @Author zk * @createTime 2018/12/14 10:00 */ public class EmojiUtil { public static String filterEmoji(String nick_name) { //nick_name 所獲取的使用者暱稱 if (nick_name == null) { return nick_name; } Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE); Matcher emojiMatcher = emoji.matcher(nick_name); if (emojiMatcher.find()) { //將所獲取的表情轉換為* nick_name = emojiMatcher.replaceAll("(表情)"); return nick_name; } return nick_name; } }
希望能夠幫到大家