【異常處理】Incorrect string value: '\xF0\x90\x8D\x83...' for column... Emoji表情字元過濾的Java實現__Java基礎解惑集

來源:互聯網
上載者:User


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.過濾掉這些特殊的表情字元。


關於第一種解決方案,請參考:http://segmentfault.com/a/1190000000616820 和 http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/

有大量細節需要注意,例如:mysql版本,mysql的配置,mysql connector的版本等等。。


因為我們使用的雲資料庫,所以我選擇了過濾這些特殊字元。其實過濾的方式很簡單,直接使用Regex匹配編碼範圍,然後替換就行了。


下面是My Code。


更多可以參考:http://stackoverflow.com/questions/27820971/why-a-surrogate-java-regexp-finds-hypen-minus


import org.apache.commons.lang3.StringUtils;public class EmojiFilterUtils {    /**     * 將emoji表情替換成*     *      * @param source     * @return 過濾後的字串     */    public static String filterEmoji(String source) {        if(StringUtils.isNotBlank(source)){            return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");        }else{            return source;        }    }    public static void main(String[] arg ){        try{            String text = "This is a smiley \uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 ";            System.out.println(text);            System.out.println(text.length());            System.out.println(text.replaceAll("[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]", "*"));            System.out.println(filterEmoji(text));        }catch (Exception ex){            ex.printStackTrace();        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.