iOS 5.0之前,苹果都是采用3个字节来承接emoji表情,Java的普通char可以支持显示。但iOS 5.0之后, 苹果升级了系统自带的emoji表情输入法,用的Unicode 6标准来统一,是采用4个bytes来承接一个 emoji表情。如果不做处理的话,这种表情直接存储到mysql5.5以下的数据库是会报错的。
就像这两个表情一样:, 在Windows 8以下估计都不支持显示,可能会显示成框框,可能压根就是空白, 你可以在Mac中使用Safari浏览器中,就可以看到。经过测试,在Mac就算用Chrome浏览器(Version 25.0.1364.172)也是不行的。
iOS5.0 Emoji表情示例
这种数据在Mysql 5.5之前,UTF-8支持1-3个字节的编码,从Mysql5.5开始后,可以支持4个字节的UTF编码,但要特殊标记。修改 Mysql相应存储字段为utf8mb4。修改语句如下

sql:

ALTER TABLE table_name
MODIFY COLUMN content varchar(500) CHARACTER
SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT 'content of message';

在某种业务情景下,我们可以选择过滤掉这种“非法”的字符。我采用的方式是,在字符上面做操作,下面是Java示例代码,核心的代码附上,应该是 无法直接下载就能够编译,你得小小的做一些微调,没有额外的依赖:

 

iOS 5.0之前,苹果都是采用3个字节来承接emoji表情,Java的普通char可以支持显示。但iOS 5.0之后, 苹果升级了系统自带的emoji表情输入法,用的Unicode 6标准来统一,是采用4个bytes来承接一个 emoji表情。如果不做处理的话,这种表情直接存储到mysql5.5以下的数据库是会报错的。
就像这两个表情一样:, 在Windows 8以下估计都不支持显示,可能会显示成框框,可能压根就是空白, 你可以在Mac中使用Safari浏览器中,就可以看到。经过测试,在Mac就算用Chrome浏览器(Version 25.0.1364.172)也是不行的。
iOS5.0 Emoji表情示例
这种数据在Mysql 5.5之前,UTF-8支持1-3个字节的编码,从Mysql5.5开始后,可以支持4个字节的UTF编码,但要特殊标记。修改 Mysql相应存储字段为utf8mb4。修改语句如下:



SQL代码


1. ALTERTABLE
2. MODIFYCOLUMN content varchar(500) CHARACTER
3. SET utf8mb4 COLLATE
4. DEFAULTNULL COMMENT 'content of message';


在某种业务情景下,我们可以选择过滤掉这种“非法”的字符。我采用的方式是,在字符上面做操作,下面是Java示例代码,核心的代码附上,应该是 无法直接下载就能够编译,你得小小的做一些微调,没有额外的依赖:



Java代码


1. publicclass
2.    
3. /**
4.   * 检测是否有emoji字符
5.   * @param source
6.   * @return 一旦含有就抛出
7.   */
8. publicstaticboolean
9. if
10. returnfalse; 
11.   } 
12.    
13. int
14.    
15. for (int i = 0; i < len; i++) { 
16. char
17.    
18. if
19. //do nothing,判断到了这里表明,确认有表情字符
20. returntrue; 
21.   } 
22.   } 
23.    
24. returnfalse; 
25.   } 
26.    
27. privatestaticboolean isEmojiCharacter(char
28. return (codePoint == 0x0) || 
29. 0x9) || 
30. 0xA) || 
31. 0xD) || 
32. 0x20) && (codePoint < = 0xD7FF)) || 
33. 0xE000) && (codePoint < = 0xFFFD)) || 
34. 0x10000) && (codePoint < = 0x10FFFF)); 
35.   } 
36.    
37. /**
38.   * 过滤emoji 或者 其他非文字类型的字符
39.   * @param source
40.   * @return
41.   */
42. publicstatic
43.    
44. if
45. return source;//如果不包含,直接返回
46.   } 
47. //到这里铁定包含
48. null; 
49.    
50. int
51.    
52. for (int i = 0; i < len; i++) { 
53. char
54.    
55. if
56. if (buf == null) { 
57. new
58.   } 
59.    
60.   buf.append(codePoint); 
61. else
62.   } 
63.   } 
64.    
65. if (buf == null) { 
66. return source;//如果没有找到 emoji表情,则返回源字符串
67. else
68. if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
69. null; 
70. return
71. else
72. return
73.   } 
74.   } 
75.    
76.   } 
77.   } 
78.



SAE的数据库也不支持EMOJI表情  引用 :http://cloudbbs.org/forum.php?mod=viewthread&tid=23209