在 Linux 下使用 nohup 运行程序时日志出现乱码,通常不是 nohup 本身的问题,而是字符编码不一致或终端环境差异导致的。常见原因和解决方法如下:
例如:
cat / vim / less 查看时终端是 GBK✅ 解决:
# 查看终端编码
echo $LANG
locale
# 推荐设置为 UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
重新运行程序:
nohup your_app > app.log 2>&1 &
nohup 启动的进程不会继承你当前 shell 的全部环境变量,尤其是:
LANGLC_ALL导致程序 fallback 到默认编码(如 ASCII / POSIX)
✅ 解决(推荐):
LANG=zh_CN.UTF-8 \
LC_ALL=zh_CN.UTF-8 \
nohup your_app > app.log 2>&1 &
或在程序启动脚本里显式设置。
Java 在 nohup 下常使用 US-ASCII
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &
nohup python3 -u app.py > app.log 2>&1 &
并确保:
import sys
print(sys.getdefaultencoding())
有些程序:
✅ 建议:
file app.log 查看编码file app.log
iconv 转换(如果是已生成的乱码日志):iconv -f GBK -t UTF-8 app.log > app.utf8.log
如果你:
cat app.log 正常vim / less 乱码那是查看工具编码设置问题
✅ vim:
:set encoding=utf-8
:set fileencodings=utf-8,gbk
echo $LANGfile app.log如果你愿意,可以告诉我:
locale 输出我可以直接帮你定位是哪一步出的问题。