Java 解决Emoji表情过滤问题(转载)
程序员文章站
2023-11-08 14:00:04
本文作者 我是周洲 原文链接 https://blog.csdn.net/u012904383/article/details/79376707 本人使用的是第三种引入jar的方法 问题: Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。 原因: UTF-8编码有可能是两个、三个、四 ......
本文作者
原文链接
本人使用的是第三种引入jar的方法
问题:
emoji表情从三方数据中获取没有过滤,导致存入db的时候报错。
原因:
utf-8编码有可能是两个、三个、四个字节。emoji表情是4个字节,而mysql的utf8编码最多3个字节,所以数据插不进去。
解决方案:
1.将已经建好的表也转换成utf8mb4,这个方法不可行,有的时候就不灵了。
2,写个工具类:过滤掉emoji表情符号
public class emojifilter { private static boolean isemojicharacter(char codepoint) { return (codepoint == 0x0) || (codepoint == 0x9) || (codepoint == 0xa) || (codepoint == 0xd) || ((codepoint >= 0x20) && (codepoint <= 0xd7ff)) || ((codepoint >= 0xe000) && (codepoint <= 0xfffd)) || ((codepoint >= 0x10000) && (codepoint <= 0x10ffff)); } /** * 过滤emoji 或者 其他非文字类型的字符 * * @param source * @return */ public static string filteremoji(string source) { if (stringutils.isblank(source)) { return source; } stringbuilder buf = null; int len = source.length(); for (int i = 0; i < len; i++) { char codepoint = source.charat(i); if (isemojicharacter(codepoint)) { if (buf == null) { buf = new stringbuilder(source.length()); } buf.append(codepoint); } } if (buf == null) { return source; } else { if (buf.length() == len) { buf = null; return source; } else { return buf.tostring(); } } }
3,使用别人封装的一个类,专门解决emoji问题的。这个在git上有开源的代码。在pom工程中引入
<dependency> <groupid>com.vdurmont</groupid> <artifactid>emoji-java</artifactid> <version>4.0.0</version> </dependency>
直接就可以在代码中使用了。
emojiparser.removeallemojis(str)
这个方法可以过滤掉字符串内的emoji表情。
————————————————
版权声明:本文为csdn博主「我是周洲」的原创文章,遵循 cc 4.0 by-sa 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhou2s_101216/article/details/79376707
下一篇: 揭秘:赤壁之战前曹操真的写信恐吓了孙权?