nohup 日志出现中文乱码,通常不是 nohup 本身的问题,而是字符编码不一致导致的。下面按常见原因和解决办法给你系统梳理一下。
日志文件编码 ≠ 终端/系统编码 ≠ 程序输出编码
当三者不一致时,中文就会变成乱码。
locale
如果你看到类似:
LANG=C
LC_ALL=
或不是 UTF-8,那基本就是它了。
临时生效:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
永久生效(推荐):
# ~/.bashrc 或 ~/.bash_profile
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
然后重新登录或执行:
source ~/.bashrc
再重新运行:
nohup java -jar app.jar > app.log 2>&1 &
✅ 这是 80% 乱码问题的根源
启动时指定编码:
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &
查看当前默认编码:
java -XshowSettings:properties -version
export PYTHONIOENCODING=utf-8
nohup python3 app.py > app.log 2>&1 &
或在代码里:
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
cat / less / vim 查看时乱码有时日志本身是对的,只是查看工具编码不对。
:set encoding=utf-8
:set fileencodings=utf-8
export LESSCHARSET=utf-8
less app.log
错误示例(容易出问题):
nohup sh run.sh > log 2>&1 &
如果 run.sh 里没设置编码,就会乱码。
✅ 正确做法:
nohup bash -c "export LANG=en_US.UTF-8; java -jar app.jar" > app.log 2>&1 &
有些服务器根本没有 UTF-8 locale。
locale -a | grep utf
如果没有,需要安装:
# CentOS / Rocky
yum install -y glibc-locale-source
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
你可以按顺序检查:
locale 是否是 UTF-8 ✅-Dfile.encoding=UTF-8 或 PYTHONIOENCODING ✅file app.log 看日志编码 ✅vim / less 打开是否正常 ✅nohup 日志中文乱码,99% 是 LANG / LC_ALL 不是 UTF-8,或程序输出编码不是 UTF-8。
如果你愿意,可以把下面信息发我,我可以精准定位:
locale 输出