转: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();
}
}
}
}
相关推荐
当iPhone 5s用户尝试在昵称中使用emoji表情时,这些表情无法成功保存到MySQL数据库中,导致报出"java.sql.SQLException: Incorrect string value"的错误。这个问题的根本原因在于字符编码的不兼容性。 首先,我们...
微信小程序中使用video组件播放m3u8直播视频,在ios的真机预览里点击video中间的播放容易卡几十秒,此时什么都做不了,手机也非常非常卡。 我的解决办法是在视频video组件里加入custom-cache={{false}} autoplay=...
标题 "卡ipone在线工具,ipone手机永久在线" 暗示了这是一个关于让iPhone设备保持持续在线状态的解决方案,可能涉及到网络设置、代理服务或者特定的应用程序。描述中的"ipone在线电脑工具"表明这可能是一个通过...
在Android开发中,为了提供与苹果iPhone设备上类似的用户体验,开发者有时会希望创建一个具有iPhone样式的时间选择器,即我们所说的"IPhone样式的datePicker"。这种控件主要用于让用户方便地选择日期或时间,常见于...
《iPone入门到精通》PPT教学涵盖了iOS操作系统的基础知识和高级技巧,旨在帮助用户从零基础开始,逐步掌握iPhone的全方位使用。本教学内容丰富,深入浅出,不仅适合初学者,也对有一定经验的iPhone用户有所裨益。 ...
此外,压缩包中提供的链接可能指向了相关的技术讨论和解决方案,比如在微信开发者工具中遇到的问题,可能需要结合微信小程序的开发环境来考虑,因为微信开发者工具可能对某些语法或API支持有限,如`Promise`未定义的...
ipone 苹果代挂
ipone4sshsh文件
批量卡ipone在线可以同时卡200个QQ在ipone在线在线
在IT行业中,"仿Ipone滚轮显示"是一种常见的用户界面设计,特别是在移动应用开发中。这个设计灵感来源于苹果公司的iPhone设备,特别是其时间选择器的交互方式。它提供了高效且直观的用户交互体验,使得用户可以轻松...
标题中的“ipone”应该是“iPhone”,描述指出这是一个基于Objective-C的iPhone应用开发项目,使用Xcode作为集成开发环境(IDE)。在这个项目中,你可能会遇到以下一系列与iOS开发、Objective-C编程语言以及Xcode...
可以卡IPONEQQ的软件,注意 2开头的QQ无法登入
标题中的“ipone4s模拟器”指的是一个用于在计算机上模拟苹果iPhone 4S设备的应用程序。这种模拟器允许开发者、测试人员或用户在不使用真实设备的情况下,体验和测试针对iPhone 4S设计的应用程序和功能。通过模拟器...
在Windows CE(简称Wince)平台上,模仿iPhone的界面效果是一项技术挑战,旨在提升用户体验,使其更加流畅和直观。iPhone的界面设计以其独特的滑动、缩放和转换效果著称,这些效果使得用户在操作应用时能感受到丰富...
标题提及的“ipone4 越狱后 美化工具”是指为已经越狱的iPhone 4设备提供的一种应用程序,用于改变手机的外观和感觉,使用户界面更加符合个人喜好。这通常包括修改图标、壁纸、铃声、锁屏界面等元素。 描述中提到的...
ipone QQ在线 带教程 详细 保证可卡永久
ipone4维修精彩文档,大家要好好看,手机出了故障自己就能处理,少花钱的哦。
卡IPONE在线
android手机版ipone5模拟器,可以打电话,浏览网页等。