温馨提示×

nohup日志中文乱码原因

小樊
57
2026-09-12 10:01:32
栏目: 编程语言

nohup 日志出现中文乱码,通常不是 nohup 本身的问题,而是字符编码不一致导致的。常见原因有下面几类:


一、程序输出编码 ≠ 终端/文件编码(最常见)

1. 程序内部使用 UTF-8,但环境不是 UTF-8

例如:

  • Java / Python / Shell 脚本输出 UTF-8
  • 但服务器 LANG 不是 zh_CN.UTF-8

查看环境:

locale

如果看到:

LANG=C
LC_ALL=

就容易出现中文乱码。

✅ 解决:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
nohup your_command > log.out 2>&1 &

二、nohup 重定向后文件编码被“误解”

nohup command > nohup.out
日志文件本身是二进制流,不乱码,但:

  • 用 cat / vim / tail 查看时
  • 终端或编辑器编码不对

例如:

  • 文件是 UTF-8
  • 终端是 GBK(Windows 常见)

✅ 解决:

  • 用 UTF-8 终端查看
  • 或转换编码:
iconv -f UTF-8 -t GBK nohup.out

三、Java 程序常见原因(非常典型)

Java 默认编码可能受系统影响:

java -Dfile.encoding=UTF-8 -jar app.jar

查看当前编码:

java -XshowSettings:properties -version 2>&1 | grep encoding

四、Python 程序原因

Python3 默认 UTF-8,但:

  • 重定向后 stdout 编码可能变成 ANSI_X3.4-1968

解决:

export PYTHONIOENCODING=utf-8
nohup python app.py > log.out 2>&1 &

或在代码里:

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

五、Shell 脚本原因

脚本文件本身是 GBK,但系统按 UTF-8 读:

file script.sh

解决:

iconv -f GBK -t UTF-8 script.sh -o script_utf8.sh

六、Windows 上传脚本/程序导致

  • Windows 默认 GBK
  • Linux 默认 UTF-8

这是跨平台乱码高发区。


快速自检清单 ✅

  1. locale 是否为 UTF-8
  2. 程序是否指定了编码
  3. 日志查看工具是否 UTF-8
  4. 脚本文件编码是否一致

如果你愿意,可以把:

  • 操作系统
  • 程序语言(Java / Python / Shell)
  • 乱码示例

发给我,我可以帮你精确定位是哪一层出的问题。

0 踩