nohup 本身不会修改日志编码,日志乱码一般是下面几类原因导致的。可以按这个思路排查和解决:
终端显示乱码(文件本身正常)
cat 看乱码,但 less / vim 正常程序输出本身就是乱码
很多 Java / Python / Shell 程序默认使用 系统 locale 编码
locale
如果看到:
LANG=C
LC_ALL=C
那就是 ASCII,中文必乱码。
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
nohup java -jar app.jar > app.log 2>&1 &
或一行:
LANG=en_US.UTF-8 nohup java -jar app.jar > app.log 2>&1 &
Java 默认编码依赖系统 locale
nohup java \
-Dfile.encoding=UTF-8 \
-jar app.jar > app.log 2>&1 &
⚠️ 注意:
-Dfile.encoding 必须在 -jar 之前nohup python3 -u app.py > app.log 2>&1 &
确保:
# -*- coding: utf-8 -*-
import sys
print("中文")
或设置环境变量:
export PYTHONIOENCODING=utf-8
如果日志已经写成了 GBK,但你想当 UTF-8 看:
iconv -f GBK -t UTF-8 app.log > app.utf8.log
或 Windows 用 Notepad++ 改编码。
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
nohup your_command > app.log 2>&1 &
locale 是 UTF-8-Dfile.encoding=UTF-8如果你愿意,可以告诉我:
我可以给你精确命令。