您当前的位置: 首页 > 知识百科 > 微信昵称不能设置包含特殊符号的解决办法?

微信昵称不能设置包含特殊符号的解决办法?

时间:2023-07-01 14:05 阅读数:15 人阅读 分类:知识百科

  很多朋友在微信昵称中设置特殊符号,但有些符号他不让你设置,小编搜集了一些办法,将在本文为大家介绍微信昵称包含特殊符号~

最近在对线上排错过程中发现很多入库时产生的错误日志,表现形态如下

  Incorrect string value : 'xF0x9Fx91x8DxE6x94...' for column 'column_x' at row 1

  在查阅资料后发现这其实是一种emoji表情符号,普遍存在iOS与Android系统中,而这种特殊字符合作用的Unicode 6标准来统一,采用4个bytes来存储一个emoji表情,而将这种表情不处理直接存储到MySQL5.5以下的版本会报错,当然想要MySQL存储这种字符也不困难,只需要修改数据库字符集为utf8mb4即可,但数据回传给网页或者移动客户端时则需要做兼容处理,所以我们暂时忽略这种需求,直接将其过滤掉.

  解决方案

  对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFilter去过滤需要处理掉的字符串,代码如下

  InputFilter emojiFilter = new InputFilter ( ) {

  @Override

  public CharSequence filter ( CharSequence source , int start , int end , Spanned dest , int dstart ,

  int dend ) {

  }

  } ;

  随后我查阅了 emoji 的wikipedia与 Github ,从中提取出表情的一个大概unicode范围,由于Java可以直接对unicode进行匹配,这样我们可以很省事直接写出Pattern即可,代码如下

  InputFilter emojiFilter = new InputFilter ( ) {

  Pattern emoji = Pattern . compile (

  "[ud83cudc00-ud83cudfff]|[ud83dudc00-ud83dudfff]|[u2600-u27ff]" ,

  Pattern . UNICODE_CASE | Pattern . CASE_INSENSITIVE ) ;

  @Override

  public CharSequence filter ( CharSequence source , int start , int end , Spanned dest , int dstart ,

  int dend ) {

  Matcher emojiMatcher = emoji . matcher ( source ) ;

  if ( emojiMatcher . find ( ) ) {

  return "" ;

  }

  return null ;

  }

  } ;

  基本上这样就能过滤掉emoji表情了

以上就是微信昵称包含特殊符号的全部内容,希望能够对需要的朋友有一些帮助,想要了解更多的微信公众号文章素材,可以访问微素达网站哦!

相关推荐:

《微信营销如何运营出众的公众号?》

《怎么做出微信公众号的热点话题》

《微信话题经典讨论问题》