首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 中 Emoji 表情的處理方案:過濾與數據庫適配

     編輯:Java 綜合教學

Java 中 Emoji 表情的處理方案:過濾與數據庫適配

項目中因用戶輸入 Emoji 導致的 Bug 並不罕見。MySQL 常用的 utf8_general_ci 僅支援 1-3 字節字符,而 Emoji 屬於 4 字節字符,直接存儲會報錯。本文總結兩種主流解決思路。

方案一:修改數據庫字符集為 utf8mb4(需 MySQL 5.5+)

使用 HeidiSQL 等工具將表/庫的默認字符集改為 utf8mb4,可完美存儲 Emoji。

修改表字符集 調整默認字符集

缺點:可能需重啟數據庫;實測中偶爾失效(如連接池字符集未同步),穩定性不如方案二。

方案二:業務層過濾 Emoji(推薦)

在數據入庫前用正則替換掉 4 字節字符,犧牲極小用戶體驗換取系統穩健。

錯誤嘗試:網上流傳的 replaceAll("[^\\u0000-\\uFFFF]", "") 會誤傷中英文,不可用。
錯誤正則示例

正確工具方法(親測有效):

import org.apache.commons.lang3.StringUtils;

/**
 * 過濾 Emoji 表情
 * @param source 原字符串
 * @param slipStr 替換字符(如 "" 或 "[Emoji]")
 * @return 過濾後字符串
 */
public static String filterEmoji(String source, String slipStr) {
    if (StringUtils.isNotBlank(source)) {
        // 匹配 Unicode 代理對區範圍:\uD800-\uDBFF \uDC00-\uDFFF
        return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", slipStr);
    }
    return source;
}

建議

  • 將上述方法封裝為通用工具類,Controller/Service 入參處統一調用。
  • 若業務強制要求存儲 Emoji,務必全鏈路配置 utf8mb4(數據庫、表、列、連接 URL 增加 characterEncoding=utf8mb4)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved