日志乱码<0x1b>[0;39m]中文乱码<DE><EA><DA>
一、场景一
现象
spring项目产生的日志中包含乱码字符,如下:
<0x1b>[0;39m]
[ESC[32m
-
tail -f
查看,能正常显示; -
less
查看,提示"nohup.2025-04-03.out" may be a binary file. See it anyway?
继续查看,显示出上方乱码 -
下载下来查看,显示上方乱码
原因
spring默认配置
spring.output.ansi.enabled
用于控制 Spring Boot 日志或控制台输出是否启用 ANSI 颜色编码。
NEVER
:禁用 ANSI 颜色(无论终端是否支持)。
ALWAYS
:强制使用 ANSI 颜色(即使终端不支持)。
DETECT
(默认值):自动检测终端是否支持 ANSI 颜色,并相应启用或禁用颜色。
在支持 ANSI 颜色的终端(如 cmd、PowerShell、Bash、Zsh)运行 Spring Boot 项目时,日志会自动显示彩色输出,提高可读性。
如果终端不支持颜色,则会自动禁用,以防乱码或显示异常字符。
方案一
less -R xxx.log
方案二
改spring配置
spring.output.ansi.enabled=never
二、场景二
现象
使用less -R xxx.log
查看时,日志中的中文是乱码的,如<DE><EA><DA>
;但下载下来查看时,中文不乱码,仅仅有
<0x1b>[0;39m]
原因
echo $LANG
看下结果是否为 如下结果,不是的话,部署服务器的字符集问题
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
方案一
设置上方的字符集,并保持永久生效
方案二
- 临时生效
export LESSCHARSET=utf-8
less -R xxx.log
- 永久生效
- 将下方内容
export LESS="-R"
export LESSCHARSET="utf-8"
添加到 ~/.bashrc
或 ~/.zshrc
source ~/.bashrc