问题1.生僻字不能在数据库中保存与正常显示
䶮、㛃、𠅤等三字节汉字可以正常保存在数据库中,𫓩、𬱖等四字节汉字无法保存在数据库表中。
原因分析:一般来说,正常汉字不会超过 3 个字节,但是会出现一些生僻字为 4 个字节 (当然,有的 emoji 表情符号也是 4 个字节),而 MySQL 的 UTF-8 编码只能支持 1-3 个字节,如果想保存 4 个字节的字符,则需要把字符集修改为 utf8mb4,而且 MySQL 的版本要高于 5.5.3。
问题2:数据库修改编码utf8mb4后能正常保存的生僻字,无法从数据库传递到到系统中
解决办法:在jdbc连接中添加useUnicode=true; characterEncoding=utf8;
问题3:页面显示?或者为空
页面显示为空,大概率是问题2导致的。数据从数据库传入后台时就无法正常获取了。根据问题2的解决办法可解决。
页面显示为?,要分析是是一个?还是两个??
一个?说明后台是把一个四字节的汉字当成了一个字。说明后台处理这个字没有问题,后台编码没问题。这个时候可能是页面编码的问题。
举例:下面是文心一言页面,点击查看源码的内容。可以看到编码是utf-8。
那么可以用这个方法看下自己的页面是否是utf-8。如果不是,则要根据自己的前端架构修改页面的编码。
如果页面显示为两个??
那么应该考虑后台代码并不能把这个四字节的汉字当成一个字。那么此时问题应该是后台处理业务逻辑的代码不是utf-8,则应该根据后台架构,修改业务逻辑处理的编码为utf-8。然后再看页面显示生僻字是否正常,还是变成一个?。在观察是否进行上一步操作。