温馨提示×

nohup日志乱码怎么解决

小樊
45
2026-08-20 09:10:32
栏目: 编程语言

nohup 日志出现乱码,通常是字符编码不一致导致的,常见原因和解决方式如下(按出现频率排序):


一、最常见原因:终端 / 系统编码不一致

1️⃣ 查看当前系统编码

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 &

推荐做法:写进启动脚本里


二、程序本身输出编码不是 UTF-8

Java 程序示例

Java 默认编码可能不是 UTF-8:

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

Python 程序示例

nohup python3 -u main.py > app.log 2>&1 &

如果 Python 脚本里有中文:

# 文件头部
# -*- coding: utf-8 -*-

三、nohup.out 文件编码问题(查看方式不对)

1️⃣ 查看日志时乱码

有时日志本身没问题,是查看方式不对

✅ 正确方式:

cat app.log
less app.log

❌ 不要用 Windows 记事本直接打开

2️⃣ 转换已有乱码日志(如果是 UTF-8 被当成 GBK)

iconv -f gbk -t utf-8 nohup.out > nohup_utf8.log

或者反过来:

iconv -f utf-8 -t gbk nohup.out > nohup_gbk.log

四、重定向时未使用 UTF-8 环境

❌ 错误示例

nohup ./app > log.txt &

✅ 正确示例

LANG=zh_CN.UTF-8 nohup ./app > log.txt 2>&1 &

五、Docker / 远程服务器场景

Docker 容器

在 Dockerfile 中加:

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

SSH 客户端

  • Xshell / SecureCRT:设置编码为 UTF-8
  • Windows Terminal / MobaXterm:确认 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 &

如果你愿意,可以把:

  • 程序语言(Java / Python / Shell)
  • locale 输出
  • 乱码截图或示例文字

发给我,我可以精准定位是哪一种乱码

0