• net core 导出内容带微信表情emoji 后乱码问题



    #region [解决微信表情emoji] /// <summary> /// 过滤emoji 或者 其他非文字类型的字符 /// </summary> /// <param name="source">param source</param> /// <returns></returns> public static String filterEmoji(String source) { if (string.IsNullOrWhiteSpace(source)) { return ""; } source = source.Replace("[^\\u0000-\\uFFFF]", "").Replace("??", ""); if (!containsEmoji(source)) { return source; //如果不包含,直接返回 } //到这里铁定包含 StringBuilder buf = null; int len = source.Length; for (int i = 0; i < len; i++) { char codePoint = source[i]; if (!isEmojiCharacter(codePoint)) { if (buf == null) { buf = new StringBuilder(source.Length); } buf.Append(codePoint); } else { } } if (buf == null) { return source; //如果没有找到 emoji表情,则返回源字符串 } else { if (buf.Length == len) { //这里的意义在于尽可能少的toString,因为会重新生成字符串 buf = null; return source; } else { return buf.ToString(); } } } /// <summary> /// 检测是否有emoji字符 /// </summary> /// <param name="source"></param> /// <returns></returns> public static bool containsEmoji(String source) { if (string.IsNullOrEmpty(source)) { return false; } int len = source.Length; for (int i = 0; i < len; i++) { char codePoint = source[i]; if (isEmojiCharacter(codePoint)) { //do nothing,判断到了这里表明,确认有表情字符 return true; } } return false; } /// <summary> /// 去掉表情符号 /// </summary> /// <param name="codePoint"></param> /// <returns></returns> public static bool isEmojiCharacter(char codePoint) { return (codePoint >= 0x2600 && codePoint <= 0x27BF) // 杂项符号与符号字体 || codePoint == 0x303D || codePoint == 0x2049 || codePoint == 0x203C || (codePoint >= 0x2000 && codePoint <= 0x200F) // || (codePoint >= 0x2028 && codePoint <= 0x202F) // || codePoint == 0x205F // || (codePoint >= 0x2065 && codePoint <= 0x206F) // /* 标点符号占用区域 */ || (codePoint >= 0x2100 && codePoint <= 0x214F) // 字母符号 || (codePoint >= 0x2300 && codePoint <= 0x23FF) // 各种技术符号 || (codePoint >= 0x2B00 && codePoint <= 0x2BFF) // 箭头A || (codePoint >= 0x2900 && codePoint <= 0x297F) // 箭头B || (codePoint >= 0x3200 && codePoint <= 0x32FF) // 中文符号 || (codePoint >= 0xD800 && codePoint <= 0xDFFF) // 高低位替代符保留区域 || (codePoint >= 0xE000 && codePoint <= 0xF8FF) // 私有保留区域 || (codePoint >= 0xFE00 && codePoint <= 0xFE0F) // 变异选择器 // || (codePoint >= U + 2600 && codePoint <= 0xFE0F) || codePoint >= 0x10000; // Plane在第二平面以上的,char都不可以存,全部都转 } #endregion

    来源:https://www.cnblogs.com/lilo202/p/8058012.html

      

  • 相关阅读:
    接口测试工具postman学习
    接口测试工具jmeter压力测试
    WSGI规范
    ADB命令详解
    eclipse导入远端git
    os.system、os.popen和subprocess.popen的区别
    获取Android当前运行最顶层的activity
    python+appuim 处理系统权限弹窗
    Appium之xpath定位元素
    Charles配置抓取HTTPS请求的Android配置
  • 原文地址:https://www.cnblogs.com/shiyilang398/p/15691428.html
Copyright © 2020-2023  润新知