iphone表情,又称emoji表情,是苹果一个方便了用户却坑了开发人员的输入法的特殊字符。

因为emoji表情有时候不支持gb编码的数据库,在后台死活过滤都过滤不掉,但偏偏在入库时被过滤的,但是记录已经生成了。

所以造成一个问题是,如果用户单一输入一个表情并提交,数据库有记录却没有内容,所以很坑爹。

找了很久终于又解决方案,菜鸟的心得,分享下。

网上得知汉字的unicode编码范围是0x4e00~0x9fa5,但程序执行的utf-16编码后,输出地格式确实%格式的。一直搞不懂这个问什么,后来才知道,0x4e00对应的是%4e%00。

而当对一个汉字进行utf-16编码是,出现的是%FE%FF%57%28,对emoji表情的编码是%FE%FF%D8%3D%DE%04,除了长度确实很难找出与汉字的区别。

其实%FE%FF是一个标志,一个big endian编码的正序标志,表示之后的%57%28即为0x5728的意思。

所以emoji的编码就得出是%D8%3D%DE%04,其实这是由2个utf-16组成的utf-32编码,分为D83D与DE04。

0xD800~0xDfff 范围用于扩展,两个0xd800以上的值一同扩展出一个特殊的UTF-32范围内的值,也就是emoji的编码。

知道与汉字的区别就很好过滤了,直接replace掉就行了。

注意,emoji表情与汉字的utf-8是没什么区别的,可能我比较笨找不到,但之前确实是卡死在utf-8这个编码上了,因为web默认返回的就是utf-8,所以很难想到要用utf-16.

String finalStr=contents;
System.out.println("=======finalStr============"+finalStr+" 长度为====="+finalStr.length());
contents=URLEncoder.encode(contents, "utf-16");

//过滤掉各种特殊符号,数字,字母
finalStr = finalStr.replaceAll("[\\pP|~|$|^|<|>|\\||\\+|=]*", "");
finalStr = finalStr.replaceAll("[A-Za-z0-9\\d]" , "");
System.out.println("=======finalStr============"+finalStr+" 长度为====="+finalStr.length());

finalStr=URLEncoder.encode(finalStr, "utf-16");
// contents=URLEncoder.encode(contents, "utf-16");
finalStr=finalStr.replace("%fe%ff", "");
finalStr=finalStr.replace("%FE%FF", "");

System.out.println("==========finalStr============"+finalStr+" 长度为====="+finalStr.length());
int splitLen=6;
int pos=0;
int len=(finalStr.length()/splitLen);
System.out.println("==========len============"+len);
String[] splitStr=new String[len];

for(int i=0;i<len;i++){
System.out.println("==========pos============"+pos);
splitStr[i]=finalStr.substring(pos, pos+splitLen);
pos+=splitLen;

System.out.println("splitStr["+i+"]============"+splitStr[i]);

if(splitStr[i].substring(1, 2).equals("d") || splitStr[i].substring(1, 2).equals("D")){
contents=contents.replace(splitStr[i], "");
System.out.println("==========该字符要被和谐啦=========");
// System.out.println("splitStr["+i+"]=="+splitStr[i]);
}
}
System.out.println("==========最终的utf-16==="+contents);
contents=URLDecoder.decode(contents, "utf-16");
System.out.println("==========最终的文字==="+contents+" 长度为"+contents.length());

转载于:https://www.cnblogs.com/sephy/archive/2012/06/28/2567890.html

过滤iphone表情相关推荐

  1. hive自定义函数过滤emoj表情符

    mysql插入数据问题:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8D\xE8\xBE-' for column 'j ...

  2. iphone表情显示问号_如何在iPhone上使用表情符号

    iphone表情显示问号 Emoji have been taking the texting world by storm for the last couple of years, but if ...

  3. java emoji过滤_java过滤emoji表情

    java手机端网页常用的过滤emoji表情,注意:过滤常规emoji表情,iso或安卓一些手机自带的特殊表情不在过滤范围 import java.util.regex.Matcher; import ...

  4. java过滤emoji表情(成功率高)

    转载自:http://blog.csdn.net/huangchao064/article/details/53283738 基本能过滤大部分的ios,安卓,微信emoji表情 有很多别的帖子搜出来很 ...

  5. iOS 过滤emoji表情

    iOS输入框过滤emoji表情 // // ViewController.m // test // // Created by 郭宇 on 13-11-15. // Copyright (c) 201 ...

  6. 匹配表情emoji 正则_详解Android过滤emoji表情正则表达式

    做了一些信息提交的操作,输入了Emoji表情时,后台数据库无法存储 原因:UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去 ...

  7. iphone表情显示问号_如何在iPhone上搜索特定的表情符号

    iphone表情显示问号 Most of us use emoji on our iPhone, but until recently finding the right one has been t ...

  8. java过滤器过滤Emoji 表情

    1.web.xml添加过滤器 <filter><filter-name>EmojiFilter</filter-name><filter-class>c ...

  9. js过滤emoji表情

    使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错. 原因是因为UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而MySQL的ut ...

最新文章

  1. 再见,Navicat!同事安利的这个IDEA的兄弟,真香!
  2. JPA中实现双向一对多的关联关系
  3. C++实现离散余弦变换(参数为二维指针)
  4. logrotate日志管理工具
  5. plc和pc串口通讯接线_PLC与PC机之间的串行通信
  6. gstreamer/deepstream方面的博文,全网首发且唯一,有图为证
  7. Java基础练习题---this
  8. ORACLE 错误 904
  9. WinForm大型企业ERP系统
  10. OSS回源的几种方式和应用场景
  11. 微信开发获取签名wx.config
  12. day05匿名函数,内置函数,二分法,递归,模块
  13. WLAN--什么是信道(Channel)
  14. 盗梦空间科普札记之一:梦里乾坤嵌套深,醒来可知在哪层?
  15. 不用找,你想要的手抄报 小报印刷模板素材都在这里
  16. 关于java字符流Reader.read()方法的个人理解
  17. BioPython ② | 面向对象编程Object Oriented Programming
  18. 刚入职场需要用到的5个顶尖自学网
  19. Java实现搜索在Bait游戏中的应用研究
  20. DTVideo UE录屏插件使用说明

热门文章

  1. reset.css 重置样式表
  2. C++中的atan2与atan
  3. Sleep()函数的使用方法详解
  4. windows10开机蓝牙自动连接
  5. WinForm DataGridView制作表格
  6. 论文要怎么读?研究院院长孙剑的最新体会都在这里了
  7. 平台云Deis部署3-deis平台安装
  8. HTML5-实现英雄联盟官网《电竞小说》和《在线客服》页面
  9. python批量操作word文档实战_python批量实现Word文件转换为PDF文件
  10. DUF:Deep Video Super-Resolution Network Using Dynamic Upsampling Filters ...阅读笔记