MySQL :: Re: How to find a character which can’t be stored in a MySQL “utf8” column in Java
How to find a character which can’t be stored in a MySQL “utf8” column in Java - Stack Overflow
一开始的思路是用正则过滤emoji表情, 但找这个正则比较麻烦, 范围段比较多
也可以用hutool的工具包, 导包麻烦, 有些项目不让用
仔细想想 mysql保存报错, 本质上是默认的uft-8是utf-8mb3, 3字节, 不支持utf-8mb4的 4字节
所以转变思路, 问题变成, 如何判断是否包含utf-8mb4的字符?
最终使用代码过滤掉
/**
* 参考: https://www.charset.org/utf-8
*/
public class StringCheckUtils {
/**
* 是否包含 utf-8mb4的字符
*/
public static boolean containUTF8mb4(String input) {
return input.codePoints().anyMatch(Character::isSupplementaryCodePoint);
}
public static void main(String[] args) {
System.out.println(containUTF8mb4("张三\uD800\uDC00"));// 超过了 0xffff
System.out.println(containUTF8mb4("李四🐖")); // emoji
System.out.println(containUTF8mb4("李四�"));// 未超过 补充字符的范围
}
}
==============