`

java ipone 微信昵称emoji表情保存失败 无法存入数据库(一)

 
阅读更多

转:http://blog.csdn.net/truong/article/details/46891525

 

问题描述:ipone5s中昵称输入“emoji 表情”,保存数据库有问题。

 

运行环境:Java、Tomcat、mysql、Linux(我的Linux下为乱码,这个是linux问题)

 

 

 

原因:IOS 5.x及以上版本的emoji 表情都是4字节的,mysql里的utf8一个字符最多3字节。所以保存不到数据库,会有以下报错:

 

Caused by: java.sql.SQLException: Incorrectstring value: '\xF0\x9F\x8E\x80\xE5\xA4...' for column 'nickname' at row 1

 

 

 

解决方法:

 

1.      去掉emoji 表情符(用的这个方法)

 

2.      修改Mysql数据编码,现在mysql中utf8mb4编码扩展到一个字符最多能有4字节(需要修改现有的数据库编码,没有使用此方法)。

 

 

 

第一种方法:

 

》去掉emoji 表情符,java类:

 

》调用代码:EmojiFilter.filterEmoji(“昵称”);

 

 

 

 

代码

 

 

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();
            }
        }
        
    }
}

分享到:
评论

相关推荐

    java ipone 微信昵称emoji表情保存失败 问题解决

    当iPhone 5s用户尝试在昵称中使用emoji表情时,这些表情无法成功保存到MySQL数据库中,导致报出"java.sql.SQLException: Incorrect string value"的错误。这个问题的根本原因在于字符编码的不兼容性。 首先,我们...

    微信小程序使用video组件播放M3U8视频卡顿

    微信小程序中使用video组件播放m3u8直播视频,在ios的真机预览里点击video中间的播放容易卡几十秒,此时什么都做不了,手机也非常非常卡。 我的解决办法是在视频video组件里加入custom-cache={{false}} autoplay=...

    卡ipone在线工具,ipone手机永久在线

    标题 "卡ipone在线工具,ipone手机永久在线" 暗示了这是一个关于让iPhone设备保持持续在线状态的解决方案,可能涉及到网络设置、代理服务或者特定的应用程序。描述中的"ipone在线电脑工具"表明这可能是一个通过...

    IPone样式的时间控件

    在Android开发中,为了提供与苹果iPhone设备上类似的用户体验,开发者有时会希望创建一个具有iPhone样式的时间选择器,即我们所说的"IPhone样式的datePicker"。这种控件主要用于让用户方便地选择日期或时间,常见于...

    iPone入门到精通ppt

    《iPone入门到精通》PPT教学涵盖了iOS操作系统的基础知识和高级技巧,旨在帮助用户从零基础开始,逐步掌握iPhone的全方位使用。本教学内容丰富,深入浅出,不仅适合初学者,也对有一定经验的iPhone用户有所裨益。 ...

    mui.css和input type=checkbox冲突,导致打不上勾(无法选中)的解决办法.zip

    此外,压缩包中提供的链接可能指向了相关的技术讨论和解决方案,比如在微信开发者工具中遇到的问题,可能需要结合微信小程序的开发环境来考虑,因为微信开发者工具可能对某些语法或API支持有限,如`Promise`未定义的...

    ipone 苹果代挂

    ipone 苹果代挂

    ipone4sshsh文件

    ipone4sshsh文件

    批量卡ipone在线

    批量卡ipone在线可以同时卡200个QQ在ipone在线在线

    仿Ipone滚轮显示

    在IT行业中,"仿Ipone滚轮显示"是一种常见的用户界面设计,特别是在移动应用开发中。这个设计灵感来源于苹果公司的iPhone设备,特别是其时间选择器的交互方式。它提供了高效且直观的用户交互体验,使得用户可以轻松...

    ipone,xcode,object-c

    标题中的“ipone”应该是“iPhone”,描述指出这是一个基于Objective-C的iPhone应用开发项目,使用Xcode作为集成开发环境(IDE)。在这个项目中,你可能会遇到以下一系列与iOS开发、Objective-C编程语言以及Xcode...

    可以卡IPONE4QQ的

    可以卡IPONEQQ的软件,注意 2开头的QQ无法登入

    ipone4s模拟器

    标题中的“ipone4s模拟器”指的是一个用于在计算机上模拟苹果iPhone 4S设备的应用程序。这种模拟器允许开发者、测试人员或用户在不使用真实设备的情况下,体验和测试针对iPhone 4S设计的应用程序和功能。通过模拟器...

    Wince Ipone 效果实现

    在Windows CE(简称Wince)平台上,模仿iPhone的界面效果是一项技术挑战,旨在提升用户体验,使其更加流畅和直观。iPhone的界面设计以其独特的滑动、缩放和转换效果著称,这些效果使得用户在操作应用时能感受到丰富...

    ipone4 越狱后 美化 工具

    标题提及的“ipone4 越狱后 美化工具”是指为已经越狱的iPhone 4设备提供的一种应用程序,用于改变手机的外观和感觉,使用户界面更加符合个人喜好。这通常包括修改图标、壁纸、铃声、锁屏界面等元素。 描述中提到的...

    ipone QQ在线 带教程

    ipone QQ在线 带教程 详细 保证可卡永久

    ipone4维修图

    ipone4维修精彩文档,大家要好好看,手机出了故障自己就能处理,少花钱的哦。

    卡IPONE在线

    卡IPONE在线

    android版ipone5模拟器

    android手机版ipone5模拟器,可以打电话,浏览网页等。

Global site tag (gtag.js) - Google Analytics