2019独角兽企业重金招聘Python工程师标准>>>

在APP开发中,大多需要涉及表情符号丰富APP的亲和力,但是因为我们的数据库一般是utf8编码,是3个字节,而表情符号基本都是四个字节的unicode编码。以下是通过emoji-Java解决数据库不能存储4字节表情符号的问题。

个人看法:

1.1:其实就是app录入表情后,传到后台在保存数据库的时候,编码问题.  把表情变成数据库想要的编码不就    妥了!  哦了就这么干,,,,,  对于存到数据库之后,用户查看的时候要的是表情,所以再把它转回来表情就ok 了!!!

1.2:还有个办法就是:把数据库变为能接受表情编码的编码格式就妥了!!(这种方式适用刚刚创建数据库),

参考:http://blog.itpub.net/26230597/viewspace-1243233/

网上有很多类似的讲解.下面说说第一个转编码的方法!!!!

1.在你的pom文件中导入以下坐标,可能不是最新的,需要最新的请到github搜索

<dependency><groupId>com.vdurmont</groupId><artifactId>emoji-java</artifactId><version>3.2.0</version>
</dependency>

基本就是这两行代码来回玩,   存数据库,    读数据库展示.........

EmojiParser.parseToAliases(string); 将表情符号转为字符   (转化字符存入数据库)
EmojiParser.parseToUnicode(string); 将字符转为表情符号 (读取数据库转化为表情)

来个栗子,

//转换表情 存数据库 if(StringUtils.isNotBlank(content)){  String  content= EmojiParser.parseToAliases(content);  }
//转化表情符号if(StringUtils.isNotBlank(content)){  String  content= EmojiParser.parseToUnicode(content);  } 

很好理解,每次在碰到有输入表情的地方   保存数据库之前 转化一下下,  读取数据库展示的时候,再转回来即可!!!

2,用了一段时间后,慢慢就发现部分表情不能转化.发现是苹果手机输入法的部分表情转化还是不能转化,尤其对于ios10系统以后的表情。顿时犯了难,每次发表内容的时候都不成功!   找了好多资料,能解决一部分表情.但是以后还是会报错!!!!!!!!!!!!   最后一个办法   就是碰见不能转化的 全部变为   方框  展示 !!(是把上个方法转化后,不能转化的 替换成框  不是所有! )

直接整栗子:

package com.zsj.utils;import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.log4j.Logger;
import org.base.utils.MD5Tools;
import org.base.utils.http.HttpTools;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class EmojiUtils {private static Logger LOG = Logger.getLogger(EmojiUtils.class);/*** 表情转换处理* @param phone* @param content* @return* @throws UnsupportedEncodingException *//*public static String parseToAliases(String cont) throws UnsupportedEncodingException{String content = "";String bb = cont;for (int i = 0; i < cont.length(); i++) {// 取出每一个字符char c = bb.charAt(i);String aa = String.valueOf(c);System.out.println(aa);int length = aa.getBytes("UTF-8").length;Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");  boolean matches = pattern.matcher(aa).matches();Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);  Pattern p = Pattern.compile("[a-zA-z]");if(length==1){if(matches){content+=aa;}else if(ub == Character.UnicodeBlock.GENERAL_PUNCTUATION  || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION  || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS  || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS  || ub == Character.UnicodeBlock.VERTICAL_FORMS){content+=aa;}else if(p.matcher(aa).find()){content+=aa;}else if(aa.equals(":")){content+=aa;}else if(aa.equals("@")){content+=aa;}else if(aa.equals("#")){content+=aa;}else if(aa.equals("$")){content+=aa;}else if(aa.equals("%")){content+=aa;}else if(aa.equals("^")){content+=aa;}else if(aa.equals("&")){content+=aa;}else if(aa.equals("*")){content+=aa;}else if(aa.equals("(")){content+=aa;}else if(aa.equals(")")){content+=aa;}else if(aa.equals("_")){content+=aa;}else if(aa.equals("-")){content+=aa;}else if(aa.equals("+")){content+=aa;}else if(aa.equals("=")){content+=aa;}else if(aa.equals("`")){content+=aa;}else if(aa.equals("~")){content+=aa;}else if(aa.equals("#")){content+=aa;}else if(aa.equals("{")){content+=aa;}else if(aa.equals("}")){content+=aa;}else if(aa.equals("|")){content+=aa;}else if(aa.equals("[")){content+=aa;}else if(aa.equals("]")){content+=aa;}else if(aa.equals(";")){content+=aa;}else if(aa.equals("'")){content+=aa;}else if(aa.equals("\"")){content+=aa;}else if(aa.equals("/")){content+=aa;}else if(aa.equals("!")){content+=aa;}else if(aa.equals(".")){content+=aa;}else if(aa.equals(",")){content+=aa;}else if(aa.equals(",")){content+=aa;}else{content+="?";}}else{content+=aa;}}System.out.println(content);return content;}*/public final static String unicodeReg = "[" + "\u4E00-\u9FBF" + // :CJK 统一表意符号 (CJK Unified Ideographs)"\u4DC0-\u4DFF" + // :易经六十四卦符号 (Yijing Hexagrams Symbols)"\u0000-\u007F" + // :C0控制符及基本拉丁文 (C0 Control and Basic Latin)"\u0080-\u00FF" + // :C1控制符及拉丁:补充-1 (C1 Control and Latin 1 Supplement)"\u0100-\u017F" + // :拉丁文扩展-A (Latin Extended-A)"\u0180-\u024F" + // :拉丁文扩展-B (Latin Extended-B)"\u0250-\u02AF" + // :国际音标扩展 (IPA Extensions)"\u02B0-\u02FF" + // :空白修饰字母 (Spacing Modifiers)"\u0300-\u036F" + // :结合用读音符号 (Combining Diacritics Marks)"\u0370-\u03FF" + // :希腊文及科普特文 (Greek and Coptic)"\u0400-\u04FF" + // :西里尔字母 (Cyrillic)"\u0500-\u052F" + // :西里尔字母补充 (Cyrillic Supplement)"\u0530-\u058F" + // :亚美尼亚语 (Armenian)"\u0590-\u05FF" + // :希伯来文 (Hebrew)"\u0600-\u06FF" + // :阿拉伯文 (Arabic)"\u0700-\u074F" + // :叙利亚文 (Syriac)"\u0750-\u077F" + // :阿拉伯文补充 (Arabic Supplement)"\u0780-\u07BF" + // :马尔代夫语 (Thaana)// "\u07C0-\u077F"+//:西非书面语言 (N'Ko)"\u0800-\u085F" + // :阿维斯塔语及巴列维语 (Avestan and Pahlavi)"\u0860-\u087F" + // :Mandaic"\u0880-\u08AF" + // :撒马利亚语 (Samaritan)"\u0900-\u097F" + // :天城文书 (Devanagari)"\u0980-\u09FF" + // :孟加拉语 (Bengali)"\u0A00-\u0A7F" + // :锡克教文 (Gurmukhi)"\u0A80-\u0AFF" + // :古吉拉特文 (Gujarati)"\u0B00-\u0B7F" + // :奥里亚文 (Oriya)"\u0B80-\u0BFF" + // :泰米尔文 (Tamil)"\u0C00-\u0C7F" + // :泰卢固文 (Telugu)"\u0C80-\u0CFF" + // :卡纳达文 (Kannada)"\u0D00-\u0D7F" + // :德拉维族语 (Malayalam)"\u0D80-\u0DFF" + // :僧伽罗语 (Sinhala)"\u0E00-\u0E7F" + // :泰文 (Thai)"\u0E80-\u0EFF" + // :老挝文 (Lao)"\u0F00-\u0FFF" + // :藏文 (Tibetan)"\u1000-\u109F" + // :缅甸语 (Myanmar)"\u10A0-\u10FF" + // :格鲁吉亚语 (Georgian)"\u1100-\u11FF" + // :朝鲜文 (Hangul Jamo)"\u1200-\u137F" + // :埃塞俄比亚语 (Ethiopic)"\u1380-\u139F" + // :埃塞俄比亚语补充 (Ethiopic Supplement)"\u13A0-\u13FF" + // :切罗基语 (Cherokee)"\u1400-\u167F" + // :统一加拿大土著语音节 (Unified Canadian Aboriginal Syllabics)"\u1680-\u169F" + // :欧甘字母 (Ogham)"\u16A0-\u16FF" + // :如尼文 (Runic)"\u1700-\u171F" + // :塔加拉语 (Tagalog)"\u1720-\u173F" + // :Hanunóo"\u1740-\u175F" + // :Buhid"\u1760-\u177F" + // :Tagbanwa"\u1780-\u17FF" + // :高棉语 (Khmer)"\u1800-\u18AF" + // :蒙古文 (Mongolian)"\u18B0-\u18FF" + // :Cham"\u1900-\u194F" + // :Limbu"\u1950-\u197F" + // :德宏泰语 (Tai Le)"\u1980-\u19DF" + // :新傣仂语 (New Tai Lue)"\u19E0-\u19FF" + // :高棉语记号 (Kmer Symbols)"\u1A00-\u1A1F" + // :Buginese"\u1A20-\u1A5F" + // :Batak"\u1A80-\u1AEF" + // :Lanna"\u1B00-\u1B7F" + // :巴厘语 (Balinese)"\u1B80-\u1BB0" + // :巽他语 (Sundanese)"\u1BC0-\u1BFF" + // :Pahawh Hmong"\u1C00-\u1C4F" + // :雷布查语(Lepcha)"\u1C50-\u1C7F" + // :Ol Chiki"\u1C80-\u1CDF" + // :曼尼普尔语 (Meithei/Manipuri)"\u1D00-\u1D7F" + // :语音学扩展 (Phone tic Extensions)"\u1D80-\u1DBF" + // :语音学扩展补充 (Phonetic Extensions Supplement)"\u1DC0-\u1DFF" + // 结合用读音符号补充 (Combining Diacritics Marks Supplement)"\u1E00-\u1EFF" + // :拉丁文扩充附加 (Latin Extended Additional)"\u1F00-\u1FFF" + // :希腊语扩充 (Greek Extended)"\u2000-\u206F" + // :常用标点 (General Punctuation)"\u2070-\u209F" + // :上标及下标 (Superscripts and Subscripts)"\u20A0-\u20CF" + // :货币符号 (Currency Symbols)"\u20D0-\u20FF" + // :组合用记号 (Combining Diacritics Marks for Symbols)"\u2100-\u214F" + // :字母式符号 (Letterlike Symbols)"\u2150-\u218F" + // :数字形式 (Number Form)"\u2190-\u21FF" + // :箭头 (Arrows)"\u2200-\u22FF" + // :数学运算符 (Mathematical Operator)"\u2300-\u23FF" + // :杂项工业符号 (Miscellaneous Technical)"\u2400-\u243F" + // :控制图片 (Control Pictures)"\u2440-\u245F" + // :光学识别符 (Optical Character Recognition)"\u2460-\u24FF" + // :封闭式字母数字 (Enclosed Alphanumerics)"\u2500-\u257F" + // :制表符 (Box Drawing)"\u2580-\u259F" + // :方块元素 (Block Element)"\u25A0-\u25FF" + // :几何图形 (Geometric Shapes)"\u2600-\u26FF" + // :杂项符号 (Miscellaneous Symbols)"\u2700-\u27BF" + // :印刷符号 (Dingbats)"\u27C0-\u27EF" + // :杂项数学符号-A (Miscellaneous Mathematical Symbols-A)"\u27F0-\u27FF" + // :追加箭头-A (Supplemental Arrows-A)"\u2800-\u28FF" + // :盲文点字模型 (Braille Patterns)"\u2900-\u297F" + // :追加箭头-B (Supplemental Arrows-B)"\u2980-\u29FF" + // :杂项数学符号-B (Miscellaneous Mathematical Symbols-B)"\u2A00-\u2AFF" + // :追加数学运算符 (Supplemental Mathematical Operator)"\u2B00-\u2BFF" + // :杂项符号和箭头 (Miscellaneous Symbols and Arrows)"\u2C00-\u2C5F" + // :格拉哥里字母 (Glagolitic)"\u2C60-\u2C7F" + // :拉丁文扩展-C (Latin Extended-C)"\u2C80-\u2CFF" + // :古埃及语 (Coptic)"\u2D00-\u2D2F" + // :格鲁吉亚语补充 (Georgian Supplement)"\u2D30-\u2D7F" + // :提非纳文 (Tifinagh)"\u2D80-\u2DDF" + // :埃塞俄比亚语扩展 (Ethiopic Extended)"\u2E00-\u2E7F" + // :追加标点 (Supplemental Punctuation)"\u2E80-\u2EFF" + // :CJK 部首补充 (CJK Radicals Supplement)"\u2F00-\u2FDF" + // :康熙字典部首 (Kangxi Radicals)"\u2FF0-\u2FFF" + // :表意文字描述符 (Ideographic Description Characters)"\u3000-\u303F" + // :CJK 符号和标点 (CJK Symbols and Punctuation)"\u3040-\u309F" + // :日文平假名 (Hiragana)"\u30A0-\u30FF" + // :日文片假名 (Katakana)"\u3100-\u312F" + // :注音字母 (Bopomofo)"\u3130-\u318F" + // :朝鲜文兼容字母 (Hangul Compatibility Jamo)"\u3190-\u319F" + // :象形字注释标志 (Kanbun)"\u31A0-\u31BF" + // :注音字母扩展 (Bopomofo Extended)"\u31C0-\u31EF" + // :CJK 笔画 (CJK Strokes)"\u31F0-\u31FF" + // :日文片假名语音扩展 (Katakana Phonetic Extensions)"\u3200-\u32FF" + // :封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months)"\u3300-\u33FF" + // :CJK 兼容 (CJK Compatibility)"\u3400-\u4DBF" + // :CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A)"\u4DC0-\u4DFF" + // :易经六十四卦符号 (Yijing Hexagrams Symbols)"\u4E00-\u9FBF" + // :CJK 统一表意符号 (CJK Unified Ideographs)"\uA000-\uA48F" + // :彝文音节 (Yi Syllables)"\uA490-\uA4CF" + // :彝文字根 (Yi Radicals)"\uA500-\uA61F" + // :Vai"\uA660-\uA6FF" + // :统一加拿大土著语音节补充 (Unified Canadian Aboriginal Syllabics Supplement)"\uA700-\uA71F" + // :声调修饰字母 (Modifier Tone Letters)"\uA720-\uA7FF" + // :拉丁文扩展-D (Latin Extended-D)"\uA800-\uA82F" + // :Syloti Nagri"\uA840-\uA87F" + // :八思巴字 (Phags-pa)"\uA880-\uA8DF" + // :Saurashtra"\uA900-\uA97F" + // :爪哇语 (Javanese)"\uA980-\uA9DF" + // :Chakma"\uAA00-\uAA3F" + // :Varang Kshiti"\uAA40-\uAA6F" + // :Sorang Sompeng"\uAA80-\uAADF" + // :Newari"\uAB00-\uAB5F" + // :越南傣语 (Vi?t Thái)"\uAB80-\uABA0" + // :Kayah Li"\uAC00-\uD7AF" + // :朝鲜文音节 (Hangul Syllables)// "\uD800-\uDBFF"+//:High-half zone of UTF-16// "\uDC00-\uDFFF"+//:Low-half zone of UTF-16"\uE000-\uF8FF" + // :自行使用区域 (Private Use Zone)"\uF900-\uFAFF" + // :CJK 兼容象形文字 (CJK Compatibility Ideographs)"\uFB00-\uFB4F" + // :字母表达形式 (Alphabetic Presentation Form)"\uFB50-\uFDFF" + // :阿拉伯表达形式A (Arabic Presentation Form-A)"\uFE00-\uFE0F" + // :变量选择符 (Variation Selector)"\uFE10-\uFE1F" + // :竖排形式 (Vertical Forms)"\uFE20-\uFE2F" + // :组合用半符号 (Combining Half Marks)"\uFE30-\uFE4F" + // :CJK 兼容形式 (CJK Compatibility Forms)"\uFE50-\uFE6F" + // :小型变体形式 (Small Form Variants)"\uFE70-\uFEFF" + // :阿拉伯表达形式B (Arabic Presentation Form-B)"\uFF00-\uFFEF" + // :半型及全型形式 (Halfwidth and Fullwidth Form)"\uFFF0-\uFFFF]";// :特殊 (Specials);/*** 将字符串转成unicode* * @param str*            待转字符串* @return unicode字符串*/public static String convert(String str) {str = (str == null ? "" : str);String tmp;StringBuffer sb = new StringBuffer(1000);char c;int i, j;sb.setLength(0);for (i = 0; i < str.length(); i++) {c = str.charAt(i);sb.append("\\u");j = (c >>> 8); // 取出高8位tmp = Integer.toHexString(j);if (tmp.length() == 1) {sb.append("0");}sb.append(tmp);j = (c & 0xFF); // 取出低8位tmp = Integer.toHexString(j);if (tmp.length() == 1) {sb.append("0");}sb.append(tmp);}return (new String(sb).toUpperCase());}/*** 2)unicode转成字符串,与上述过程反向操作即可 将unicode 字符串* * @param str*            待转字符串* @return 普通字符串*/public static String revert(String str) {str = (str == null ? "" : str);if (str.indexOf("\\u") == -1)// 如果不是unicode码则原样返回return str;StringBuffer sb = new StringBuffer(1000);for (int i = 0; i < str.length() - 6;) {String strTemp = str.substring(i, i + 6);String value = strTemp.substring(2);int c = 0;for (int j = 0; j < value.length(); j++) {char tempChar = value.charAt(j);int t = 0;switch (tempChar) {case 'a':t = 10;break;case 'b':t = 11;break;case 'c':t = 12;break;case 'd':t = 13;break;case 'e':t = 14;break;case 'f':t = 15;break;default:t = tempChar - 48;break;}c += t * ((int) Math.pow(16, (value.length() - j - 1)));}sb.append((char) c);i = i + 6;}return sb.toString();}public static String emojiChange(String string) {System.out.println("__________________________________");try {System.out.println("all-string:" + string);System.out.println("all-unicode:" + convert(string));Pattern pattern = Pattern.compile(unicodeReg);StringBuffer sbBuffer = new StringBuffer();for (int i = 0; i < string.length(); i++) {char c = string.charAt(i);String temp = String.valueOf(c);Matcher matcher = pattern.matcher(temp);if (matcher.find()) {sbBuffer.append(temp);} else {sbBuffer.append("□");}System.out.println("temp:" + temp + ";unicode:" + convert(temp));}System.out.println("sb:" + sbBuffer.toString());System.out.println("--------------------------------------");return sbBuffer.toString();} catch (Exception e) {e.printStackTrace();}return "";}public static String parseToAliases(String cont){String emojiChange = emojiChange(cont);System.out.println(emojiChange);return emojiChange;}public static void main(String[] args) throws UnsupportedEncodingException {System.out.println(EmojiUtils.parseToAliases("嘻嘻ߤ­"));}
}

直接复制上面的代码,建一个工具类 就OK了! 每次转化的时候  就得先用上面的方法,转化表情后,再来一行:

String content= EmojiUtils.parseToAliases(content);

可以把他两融合到一个工具类.之后引用一行代码即可!!!!

附表情地址:https://apps.timwhitlock.info/emoji/tables/unicode

之后有新的方法,再来一起讨论!!!!!!!!!  欢迎各位大神们指教,一起讨论!!!!!!!!!!!!!!!!!!!!

转载于:https://my.oschina.net/u/3659224/blog/1617669

java关于安卓,苹果输入表情数据库处理相关推荐

  1. android手机如何拥有苹果表情包,安卓手机emoji表情怎么改成苹果的

    安卓手机怎么打出来苹果emoji表情呢?大家都知道苹果手机的emoji表情比安卓的好看,那么有没有什么方法可以将安卓手机emoji表情改成苹果的呢?下面小编就给大家讲讲具体的操作步骤,一起看看吧! 首 ...

  2. java计算机毕业设计苹果酒店住房管理源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计苹果酒店住房管理源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计苹果酒店住房管理源码+系统+数据库+lw文档+mybatis+运行部署 本源码技术栈 ...

  3. 苹果x微信语音十秒就断_微信朋友圈,能用图片和语音评论了!安卓苹果都可以...

    点击上方「科技妞」,关注我们哦  作为一个驰骋网络多年的老司机,小妞喜爱的App和网站已经换了一批又一批,但讨厌的东西始终没变,那就是广告.广告和广告! 最近,微信的朋友圈广告又发生了点变化,和我们普 ...

  4. java使用unicode过滤emoji表情

    最近搞个微信公众号的项目,如果微信用户名有表情符号的,那么在我们的系统里面就会保存不了.最初的解决方案是把数据库的utf8格式改为utf8mb4.这样就能兼容保存emoji表情符号,后面又发现,保存的 ...

  5. android ios语音转码,手机如何将语音转文字?这几种方法真简单,安卓苹果通用...

    原标题:手机如何将语音转文字?这几种方法真简单,安卓苹果通用 手机可以将语音转文字吗? 当然可以啦,方法还不止一种,下面就简单给大家介绍几种,安卓苹果手机通用的方法吧. 1.输入法-实时语音转文字 手 ...

  6. java 连接sql_java 连接sql server2008数据库配置

    1.首先要去Microsoft官网下载sqljdbc2.0驱动--Microsoft SQL Server JDBC Driver 2.0.exe,很小大概就4M,解压后里面有2个Jar包,sqljd ...

  7. java毕业设计房产交易系统Mybatis+系统+数据库+调试部署

    java毕业设计房产交易系统Mybatis+系统+数据库+调试部署 java毕业设计房产交易系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...

  8. android 手机输入法表情,最近手机输入法玩出花,讯飞输入法安卓版让表情包说话?...

    原标题:最近手机输入法玩出花,讯飞输入法安卓版让表情包说话? 网络社交流行"能发图就别说话",但一夜之间,一部分高级玩家已经进化到"斗嘴",参加斗图的表情拥有了 ...

  9. iOS限制输入表情(emoji)

    在提交数据发送网络请求,由于用户输入了emoji表情,服务端返回系统异常,体验感很差.为了解决服务器不能验证emoji编码的问题,需要在本地进行emoji的输入控制(一般情况应该由服务器在数据库中添加 ...

最新文章

  1. 手机录音失真_“手机都能录音,还要啥录音笔”,四点原因让说这话的人啪啪打脸...
  2. 机器学习-学习资源整理
  3. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍
  4. hdu 1228-A+B
  5. linux fedora35安装deepin-wine:deepin-wine-on-fedora项目
  6. JSON.parse()和JSON.stringify()的区别
  7. openresty 前端开发进阶一之http后端
  8. 信息学奥赛一本通(1412:二进制分类)
  9. c mysql清理日志文件_MySQL 一般查询日志或者慢查询日志历史数据的清理
  10. 旧的起点(开园说明)
  11. 大数据物流项目:概述及Docker入门(一)
  12. 计算机学业水平考试反思总结8百,期中考试后的反思总结800字
  13. MySQL数据库基础详解(非原创)
  14. WiFi大师专业版4.1.4独立源码
  15. 研究日记:虚拟歌姬自动调教之歌曲音频切割的问题
  16. 好用的平板触控笔,apple pencil的平替笔推荐
  17. error: unrecognized arguments:
  18. SQL -gt;gt;gt;gt;
  19. REITS的投资方式
  20. HDU 3535 AreYouBusy

热门文章

  1. Maven公共中央仓库发布自己的Jar包
  2. 公司股权变更的31个常见问题
  3. 序号计算机软件工程协会网,序号
  4. 面试:逻辑题与思考题整理
  5. matlab step函数的用法,matlab中step用法
  6. js中的this关键字
  7. html 鼠标经过表格列,JavaScript实现鼠标经过表格某行时此行变色
  8. QT:自带框架安装包制作
  9. 别再回来了!GandCrab勒索软件最终版本解密工具降世
  10. 23年最新!盘点深圳最值得加入的公司!