zoukankan      html  css  js  c++  java
  • java 编码

    http://blog.csdn.net/shootyou/article/details/44852639

    Emoji表情字符现在在APP已经广泛支持了。但是MySQL的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常:

    1. Incorrect string value: 'xF0x90x8Dx83...' 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的版本等等。。

    因为我们使用的云数据库,所以我选择了过滤这些特殊字符。其实过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。

    下面是我的代码。

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

    1. import org.apache.commons.lang3.StringUtils;
    2. public class EmojiFilterUtils {
    3. /**
    4. * 将emoji表情替换成*
    5. *
    6. * @param source
    7. * @return 过滤后的字符串
    8. */
    9. public static String filterEmoji(String source) {
    10. if(StringUtils.isNotBlank(source)){
    11. return source.replaceAll("[\ud800\udc00-\udbff\udfff\ud800-\udfff]", "*");
    12. }else{
    13. return source;
    14. }
    15. }
    16. public static void main(String[] arg ){
    17. try{
    18. String text = "This is a smiley uD83CuDFA6 faceuD860uDD5D uD860uDE07 uD860uDEE2 uD863uDCCA uD863uDCCD uD863uDCD2 uD867uDD98 ";
    19. System.out.println(text);
    20. System.out.println(text.length());
    21. System.out.println(text.replaceAll("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", "*"));
    22. System.out.println(filterEmoji(text));
    23. }catch (Exception ex){
    24. ex.printStackTrace();
    25. }
    26. }
    27. }
  • 相关阅读:
    Android Studio 打包生成apk
    找水王
    关于搜狗输入法的用户体验评价
    c语言函数的嵌套使用和矩阵运算
    人月神话阅读笔记02
    第一阶段冲刺意见评论汇总
    高校表白App-团队冲刺第十天
    高校表白App-团队冲刺第九天
    高校表白App-团队冲刺第八天
    人月神话阅读笔记01
  • 原文地址:https://www.cnblogs.com/flintlovesam/p/13736534.html
Copyright © 2011-2022 走看看