• 问题记录-java图片验证码显示乱码


    部署机器

    • 操作系统:centos 7
    • java版本: java version "1.7.0_80"

    问题症状

    • 将一个java web的程序部署到了两台配置相同的服务器上之后(服务器1、服务器2),程序都正常启动,当前端请求注册服务时,会向后台请求图片验证码,然而(服务器1)验证码出现了如图1所示的乱码问题,图二为(服务器2)正常的验证码显示。

    图1

    图2

    问题探索

    • 猜测1:java字符的编码问题

      • 探索过程:将字符编码转换成utf-8编码,但是乱码问题没有得到解决
    • 猜测2:服务器字体问题,由于两台服务器的java环境是一样的,因此猜测两台服务器的字体配置不一致导致的。

      • 探索过程:(ps:以下操作均在linux的root权限下操作)

      1.查看两台服务器的字体版本,通过在服务器上输入如下指令:

    rpm -qa | grep font
    

    服务器1

    服务器2

    上面的两幅图分别显示了服务器1和服务器2的字体库版本,可以看出两台服务器的字体库版本是一样的,因此排除了字体库版本不一样的假设。
    2.查看linux字体库里面的字体有哪些
    怎样知道字体库的位置呢,通过输入如下指令就可以找到:

    find / -name fonts
    

    进入上图标出的文件夹,指令为:

    cd /usr/share/fonts
    

    进入文件夹,发现服务器1的文件夹下有一个文件夹lxy,而服务器2该文件夹下没有文件夹,下图显示了文件文件夹lxy的内容。

    解决方案

    • 将lxy文件夹移动到其他的文件夹(ps:貌似只改文件夹的名称是不行的,必须将该文件夹移出fonts文件夹),然后重启web服务,问题得到解决。指令:
    mv lxy tager
    

    总结

    • 该问题是linux字体库里面的字体文件不同造成的,我猜测java加载字体库时先加载linux系统自带的字体库,如果找不到对应的字体库就会去找java自己的字体库(ps:只是本人的猜测,是否是这样,有待哪位大神来解锁)。
  • 相关阅读:
    1、TensorFlow简介
    4、numpy+pandas速查手册
    3、pandas
    2、Numpy常用函数
    11、C内存四区模型
    1、Numpy基础
    10、C++函数
    开始
    创建与删除SQL约束或字段约束
    Halcon
  • 原文地址:https://www.cnblogs.com/cafebabe-yun/p/8417545.html
Copyright © 2020-2023  润新知