版本 spring boot 2.7.18 jdk version 1.8
问题:ECS 启动 打印的日志有中文 无乱码情况,到容器运行之后 竟然出现了部分中文乱码,详细把基础镜像、业务镜像都拆分了一遍 专门加上 LANG=en_US.UTF-8 ,仍然无用 包括在 k8s yaml 都增加了环境变量 依然显示 LANG=C.utf8 ,最终发现是通过阿里云控制台登录容器终端,字符集确实是有问题 通过 kubectl exec 进去之后,显示字符集是没问题的,但 java 服务启动依然会有部分中文乱码。
大佬们,请把你们的解决方案放在评论区~
1
dode 2 天前
吃瓜
|
3
Dorathea 2 天前
不用中文日志, 不折腾...
|
5
dode 2 天前
使用 debian 、ubuntu 容器镜像,安装中文语言包,部署启动应用服务
|
7
midsolo 2 天前
有排除疑难杂症的时间,不如构建一个支持中文的 ubuntu 镜像。
FROM ubuntu:20.04 RUN apt-get update && \ apt-get install -y language-pack-zh-hans locales && \ locale-gen zh_CN.UTF-8 && \ update-locale LANG=zh_CN.UTF-8 ENV LANG=zh_CN.UTF-8 ENV LC_ALL=zh_CN.UTF-8 |
8
julyclyde 2 天前 应该是你没明白环境变量的传播关系导致的
我猜你说的“专门加上”是加在 bashrc 甚至.bash_profile 里了 |
9
shuangbiaog 2 天前
有没有检查 jvm 启动参数和日志框架配置呢
|
10
runliuv 2 天前
java -Dfile.encoding=utf-8 。
要么控制台有乱码,要么 TXT 日志有乱码。反正 2 者乱一样儿。 |
13
vvtf 2 天前
java 没特别设置的不会是乱码, 你可以把日志拉到本地看下是不是 utf8 格式的.
所以大概率就是终端的乱码. 需要 exec -ti 进入容器时设置一下 LANG 试试. |
14
OnlyJack OP @shuangbiaog 加的都挺全了,依然是部分中文乱码
-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -Dspring.http.encoding.charset=UTF-8 -Dspring.http.encoding.enabled=true -Dspring.messages.encoding=UTF-8 |
16
OnlyJack OP 感谢各位大佬~ 实际上的问题出在 java 项目上,在编译的过程中 父 pom 没有指定 utf-8 导致的,包括子 pom 和运行过程中导致的。
其实这个相当于 java 项目不规范导致的,理论上都要增加 utf-8 并且要设置为全局。 父 pom 配置 <!-- 设置项目编码为 UTF-8 ,解决编译和运行时的中文乱码问题 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 子 pom 配置 <encoding>UTF-8</encoding> WebApplication.java // 设置系统默认编码为 UTF-8 ,解决容器环境中文乱码问题 // 必须在 Spring Boot 启动之前设置,确保日志输出使用正确的编码 System.setProperty("file.encoding", "UTF-8"); System.setProperty("sun.jnu.encoding", "UTF-8"); |