在 Linux 下使用 nohup 运行程序时日志出现乱码,通常不是 nohup 本身的问题,而是字符编码 / 终端环境不一致导致的。常见原因和解决办法如下:
例如:
less / cat 使用 GBK / ISO-8859-1表现:日志文件本身是 UTF-8,但你在 GBK 终端下看就是乱码。
✅ 解决:
# 查看当前编码
locale
# 设置为 UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
并确保终端(Xshell / SecureCRT / Terminal)也使用 UTF-8。
nohup 会脱离当前终端,不会继承终端的编码环境,容易 fallback 到默认编码。
✅ 解决:在启动命令前显式指定编码
nohup java -Dfile.encoding=UTF-8 -jar app.jar > log.out 2>&1 &
或 Python:
nohup python3 -u app.py > log.out 2>&1 &
(Python3 默认 UTF-8,Python2 容易乱码)
比如:
✅ 检查:
file log.out
# 输出是否是 UTF-8
✅ Java 示例:
<encoder>
<pattern>%d %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
错误示例(容易出问题):
nohup command | tee log.out &
✅ 推荐方式:
nohup command > log.out 2>&1 &
如果你在:
rz/sz 传日志可能变成 GBK。
✅ 转换编码:
iconv -f GBK -t UTF-8 log.out > log.utf8
locale 是否为 UTF-8-Dfile.encoding=UTF-8file log.out 是什么编码如果你愿意,可以把:
locale 输出file 结果发出来,我可以直接帮你定位是哪一步出的问题。