温馨提示×

nohup日志乱码怎么处理

小樊
42
2026-10-26 23:54:13
栏目: 编程语言

nohup 本身不会制造乱码,乱码通常是以下原因之一造成的:

  1. 程序输出编码 ≠ 终端/文件查看编码
  2. 程序本身输出就是乱码(如 Java、Python 未指定编码)
  3. tail / cat / 编辑器打开方式不对
  4. SSH 客户端编码设置问题

下面按最常见场景给你解决方案。


一、先确认乱码来源

file nohup.out

常见结果:

  • UTF-8 text → 文件没问题,是查看方式问题
  • ISO-8859 text → 程序输出不是 UTF-8
  • data → 二进制混进日志了

二、程序启动时就指定编码(最推荐)

✅ Java

nohup java -Dfile.encoding=UTF-8 -jar app.jar > nohup.out 2>&1 &

✅ Python

nohup python -u app.py > nohup.out 2>&1 &

或在代码里:

import sys
sys.stdout.reconfigure(encoding='utf-8')

✅ Shell 脚本

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

三、nohup 启动时强制 UTF-8 环境

nohup env LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 your_command > nohup.out 2>&1 &

四、查看日志时解决乱码

1️⃣ 用正确编码查看

cat nohup.out
less nohup.out

确保终端是 UTF-8(如 Xshell / SecureCRT / Terminal)

2️⃣ 转换已有乱码日志

如果是 GBK:

iconv -f GBK -t UTF-8 nohup.out > nohup_utf8.out

如果是 ISO-8859-1:

iconv -f ISO-8859-1 -t UTF-8 nohup.out > nohup_utf8.out

五、避免 nohup.out 乱码的最佳实践 ✅

nohup your_command \
  > logs/app.log 2>&1 &

并加:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

六、快速自查清单 ✅

  • [ ] 程序是否指定 UTF-8?
  • [ ] nohup 启动前是否 export 编码?
  • [ ] 终端是否为 UTF-8?
  • [ ] 日志文件本身是什么编码?

如果你愿意,可以:

  • 贴一段 nohup.out 内容
  • 说明 什么程序(Java / Python / shell)
  • 告诉我 服务器系统(CentOS / Ubuntu)

我可以帮你精准定位是哪一步出的问题。

0 踩