天天看點

emoji無法顯示_微信昵稱emoji表情,特殊表情導緻清單不顯示,導出EXCEL報錯等問題解決!...

最近做的項目,上線後一切正常,過段時間管理者回報使用者導出EXCEL報錯,前台擷取使用者清單不顯示,查找問題找到是微信昵稱、emoji表情導緻報錯,

emoji無法顯示_微信昵稱emoji表情,特殊表情導緻清單不顯示,導出EXCEL報錯等問題解決!...

emoji表情介紹

由于微信接口中對于emoji表情使用的是UTF-8的二進制字元串,并沒有解碼,表現就是當收到微信端使用者發來的emoji表情時,顯示為一個方塊型「」或是無法顯示的字元,這時就需要對其進行轉碼。

每個emoji表情其實都有相應的unicode編碼,在解析使用者向公衆号發送的文字中的emoji表情字元時,我們可以根據unicode碼來比對或存儲資訊中的emoji表情;同理在向使用者發送包含emoji表情的文字消息時,則将表情字元根據unicode編碼進行二進制轉碼後再發送。

找網上各種,全是PHP和JAVA拿來試驗一下,沒解決問題,坑~~~,繼續尋找,然後改造和請教群友,解決此問題

我使用的簡單粗暴的方法,直接過濾到了emoji編碼,暫時沒有發現誤傷:

1 #region 去掉表情符号

2 ///

3 ///去掉表情符号4 ///

5 ///

6 ///

7 public static bool isEmojiCharacter(charcodePoint)8 {9 return (codePoint >= 0x2600 && codePoint <= 0x27BF) //雜項符号與符号字型

10 || codePoint == 0x303D

11 || codePoint == 0x2049

12 || codePoint == 0x203C

13 || (codePoint >= 0x2000 && codePoint <= 0x200F) //14 || (codePoint >= 0x2028 && codePoint <= 0x202F) //15 || codePoint == 0x205F //16 || (codePoint >= 0x2065 && codePoint <= 0x206F) //17

18 || (codePoint >= 0x2100 && codePoint <= 0x214F) //字母符号

19 || (codePoint >= 0x2300 && codePoint <= 0x23FF) //各種技術符号

20 || (codePoint >= 0x2B00 && codePoint <= 0x2BFF) //箭頭A

21 || (codePoint >= 0x2900 && codePoint <= 0x297F) //箭頭B

22 || (codePoint >= 0x3200 && codePoint <= 0x32FF) //中文符号

23 || (codePoint >= 0xD800 && codePoint <= 0xDFFF) //高低位替代符保留區域

24 || (codePoint >= 0xE000 && codePoint <= 0xF8FF) //私有保留區域

25 || (codePoint >= 0xFE00 && codePoint <= 0xFE0F) //變異選擇器26 //|| (codePoint >= U + 2600 && codePoint <= 0xFE0F)

27 || codePoint >= 0x10000; //Plane在第二平面以上的,char都不可以存,全部都轉

28

29 }30 ///

31 ///檢測是否有emoji字元32 ///

33 ///

34 ///

35 public static boolcontainsEmoji(String source)36 {37 if (string.IsNullOrEmpty(source))38 {39 return false;40 }41

42 int len =source.Length;43

44 for (int i = 0; i < len; i++)45 {46 char codePoint =source[i];47

48 if(isEmojiCharacter(codePoint))49 {50 //do nothing,判斷到了這裡表明,确認有表情字元

51 return true;52 }53 }54

55 return false;56 }57 ///

58 ///過濾emoji 或者 其他非文字類型的字元59 ///

60 /// param source

61 ///

62 public staticString filterEmoji(String source)63 {64 if(string.IsNullOrWhiteSpace(source))65 {66 return "";67 }68 source = source.Replace("[^\\u0000-\\uFFFF]", "").Replace("??", "");69 if (!containsEmoji(source))70 {71 return source; //如果不包含,直接傳回

72 }73 //到這裡鐵定包含

74 StringBuilder buf = null;75

76 int len =source.Length;77

78 for (int i = 0; i < len; i++)79 {80 char codePoint =source[i];81

82 if (!isEmojiCharacter(codePoint))83 {84 if (buf == null)85 {86 buf = newStringBuilder(source.Length);87 }88

89 buf.Append(codePoint);90 }91 else

92 {93 }94 }95

96 if (buf == null)97 {98 return source; //如果沒有找到 emoji表情,則傳回源字元串

99 }100 else

101 {102 if (buf.Length ==len)103 {104 //這裡的意義在于盡可能少的toString,因為會重新生成字元串

105 buf = null;106 returnsource;107 }108 else

109 {110 returnbuf.ToString();111 }112 }113

114 }115 #endregion

前台

emoji無法顯示_微信昵稱emoji表情,特殊表情導緻清單不顯示,導出EXCEL報錯等問題解決!...

成功……

emoji無法顯示_微信昵稱emoji表情,特殊表情導緻清單不顯示,導出EXCEL報錯等問題解決!...

到此解決了微信昵稱emoji表情,特殊表情導緻清單不顯示,導出EXCEL報錯等問題解決!

代碼雖然不是最完美的,也有優化的空間,非常感謝群友“燃冰”。

下一篇: template