![74722d60403a10f89567c7ecba690bee.png](https://i-blog.csdnimg.cn/blog_migrate/8e37bffbb2ca9b330519adf5f5158b0d.jpeg)
问题
今天在部署项目的时候发现后端提供给前端验证码图片的Base64字符串编解码异常。按照正常情况来说应该是几个字母的验证码变成了△/>等符号。
思考
起初以为是字符集的问题,但经过检查发现项目中已经统一设置了UTF-8的字符编码,并且这个服务在线上本身并没有什么问题。考虑了差异性,发现出问题项目部署在了一个新申请的服务器。所以马上把项目打包部署在一个老的服务器上运行,Bingo正常。锁定为服务器差异导致的编解码问题。
由于代码不是我写的,所以在代码上追本溯源发现了这样一行代码
new Font("Arial",Font.PLAIN,30);
本能的想到服务器上有Arial这个字体吗?登录上服务器后可以根据/etc/fonts/fonts.conf配置文件查看Font directory list(字体路径),默认存放在/usr/share/fonts目录下。
对比了老服务器和新服务器/usr/share/fonts目录下的内容,前者为空后者存在一个lyx字体。怀疑有可能是lyx顶掉了默认值。解决方式①删掉lyx文件夹;②增加自定义字体。
解决
因为没有没有删除权限,方法一没有尝试。
方法二:从windows中C:WINDOWSFonts目录下拷贝一个代码中指定的字体("Arial")。在/usr/share/fonts目录下创建"Arial”同名文件夹,并粘贴进拷贝的字体。使用fc-cache命令刷新字体缓存,使用fc-list命令查看是否刷新成功。
再次执行代码,验证码显示正常。