nohup 本身不会导致日志编码乱码,它只是把进程的输出重定向到文件(默认是 nohup.out),不改变内容的编码。
日志出现乱码,通常原因有下面几种:
✅ 解决:
iconv -f gbk -t utf-8 nohup.out
或
vim nohup.out
:set fileencoding=utf-8
比如:
echo $LANG
# 可能是 C 或 POSIX
✅ 解决:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
再启动程序:
nohup java -jar app.jar > nohup.out 2>&1 &
Java 示例(常见乱码来源)
nohup java -Dfile.encoding=UTF-8 -jar app.jar > nohup.out 2>&1 &
Python 示例
nohup python -u app.py > nohup.out 2>&1 &
(Python3 默认 UTF-8,一般问题不大)
Windows 默认 GBK,Linux 默认 UTF-8。
✅ 解决:
dos2unix nohup.out
iconv -f gbk -t utf-8 nohup.out > nohup_utf8.out
nohup 不编码,只“搬运”输出;乱码是程序输出编码 ≠ 查看编码
如果你愿意,可以告诉我:
我可以帮你精确定位。