nohup 日志出现乱码,通常是字符编码不一致导致的,常见原因和解决方式如下(按出现频率排序):
locale
重点看:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果不是 UTF-8,很容易乱码。
在执行 nohup 前设置编码:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
再运行:
nohup java -jar app.jar > app.log 2>&1 &
✅ 推荐做法:写进启动脚本里
Java 默认编码可能不是 UTF-8:
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &
nohup python3 -u main.py > app.log 2>&1 &
如果 Python 脚本里有中文:
# 文件头部
# -*- coding: utf-8 -*-
有时日志本身没问题,是查看方式不对
✅ 正确方式:
cat app.log
less app.log
❌ 不要用 Windows 记事本直接打开
iconv -f gbk -t utf-8 nohup.out > nohup_utf8.log
或者反过来:
iconv -f utf-8 -t gbk nohup.out > nohup_gbk.log
nohup ./app > log.txt &
LANG=zh_CN.UTF-8 nohup ./app > log.txt 2>&1 &
在 Dockerfile 中加:
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
| 检查项 | 命令 |
|---|---|
| 系统编码 | locale |
| Java 编码 | -Dfile.encoding=UTF-8 |
| 日志查看方式 | less / cat |
| 是否 Windows 打开 | 用 UTF-8 编辑器 |
| Docker | ENV LANG |
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &
如果你愿意,可以把:
locale 输出发给我,我可以精准定位是哪一种乱码。