平台会显示成“??

问题描述: 正常录入人员信息后,系统会显示成“??
原因:系统 locale 未正确设置
检查系统 locale 配置

  1. locale

输出:
LANG=
LC_CTYPE=”POSIX”
LC_NUMERIC=”POSIX”
LC_TIME=”POSIX”
LC_COLLATE=”POSIX”
LC_MONETARY=”POSIX”
LC_MESSAGES=”POSIX”
LC_PAPER=”POSIX”
LC_NAME=”POSIX”
LC_ADDRESS=”POSIX”
LC_TELEPHONE=”POSIX”
LC_MEASUREMENT=”POSIX”
LC_IDENTIFICATION=”POSIX”
LC_ALL=
系统 locale 为 POSIX(等效于 ASCII),JVM 启动时默认继承该编码。
修复方案
修改系统 locale 配置

  1. # 编辑系统 locale 配置文件
  2. sudo vi /etc/locale.conf
  3. # 写入以下内容
  4. LANG=en_US.UTF-8

配置 shell 环境变量
由于部分环境或 shell 配置可能覆盖系统 locale,需要在用户的环境变量文件中显式设置:

  1. # 追加到 ~/.bash_profile
  2. echo 'export LANG=en_US.UTF-8' >> ~/.bash_profile
  3. # 立即生效
  4. source ~/.bash_profile

验证环境变量

  1. # 确认当前 shell 的 locale
  2. locale
  3. # 确认 LANG 变量
  4. echo $LANG

确保输出中 LANG=en_US.UTF-8
重启服务
在 已设置正确 LANG 的当前 shell 中 重启服务,确保新 JVM 进程继承正确的编码:

  1. sh /home/seekcy/chemical-locate/wwyt-server/service-server.sh restart

验证修复

  1. # 确认新进程的编码
  2. jinfo -sysprops $(pgrep -f wwyt-server | head -1) | grep file.encoding

期望输出:
file.encoding = UTF-8

转载请注明作者和出处,并添加本页链接。
原文链接: //svn.seekcy.com/911