项目中遇到了一些特殊字符需要插入数据库
大概是这样的
这个字段在项目中是昵称的意思,需要排序
直接插入数据库会报错,并且特殊字符在后台接收后显示成的是方块
试过用StringEscapeUtils.escapeJava(param)转换后是可以插入数据库的,但是他是将所有字符都转成\u594B\u6597\u7684\u4FCA\u54E5\uD83D\uDE97\uD83D\uDCA8这种了。在排序的时候就出现了乱排序的现象,并且这个字符串中是带u的,这样搜索u就肯定会搜索出来
问下该如何处理这种问题?有没有什么好的办法可以插入数据库,并且实现排序功能
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个东东叫:emoji
如果你希望让你的网站或者App支持Emoji,那么在初次设置MySQL时,有一些细节你需要知道。
Emoji字符的特殊之处是,在存储时,需要用到4个字节。而MySQL中常见的utf8字符集的utf8_general_ci 这个collate最大只支持3个字节。所以为了能够存储Emoji,你需要改用 utf8mb4 字符集。
在创建表时,用类似这样的语句:
CREATE
TABLE
`
tbl
`
(...)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
utf8mb4_general_ci
;
http://www.v2ex.com/t/137724copy这里的
如果不想保留emoji,或者搞不定了不得不舍弃,可以用如下代码过滤:
importorg.apache.commons.lang3.StringUtils;publicclassEmojiFilterUtils{/***将emoji表情替换成***@paramsource*@return过滤后的字符串*/publicstaticStringfilterEmoji(Stringsource){if(StringUtils.isNotBlank(source)){returnsource.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]","*");}else{returnsource;}}publicstaticvoidmain(String[]arg){try{Stringtext="Thisisasmiley\uD83C\uDFA6face\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(Exceptionex){ex.printStackTrace();}}}