容器中文乱码核心原因是UTF-8编码未配置和中文字体缺失,需双管齐下:在Dockerfile中设ENV LANG=C.UTF-8,并安装fonts-wqy-microhei等字体及执行fc-cache -fv刷新缓存。

容器里中文乱码,核心就两件事:编码没设对、字体没装上。光改一个,问题照旧。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
确认并设置 UTF-8 编码环境
进容器执行 locale,如果看到 LANG=C 或 LC_ALL=POSIX,说明编码没配。
在 Dockerfile 里加这行就够了:ENV LANG C.UTF-8
Ubuntu/Debian 镜像也支持 zh_CN.UTF-8,但 C.UTF-8 更通用、无需额外安装语言包,推荐首选。
别只在运行时 export,那只是临时生效,必须写进镜像配置才持久。
安装中文字体并刷新缓存
基础镜像(比如 openjdk:11-jre-slim、alpine、centos)默认没有中文字体。
- Debian/Ubuntu 镜像:
RUN apt-get update && apt-get install -y fonts-wqy-microhei && rm -rf /var/lib/apt/lists/* RUN fc-cache -fv
- Alpine 镜像:
RUN apk add --no-cache ttf-dejavu ttf-liberation ttf-opensans fontconfig && fc-cache -fv
- CentOS/RHEL 镜像:
RUN yum install -y fontconfig && yum clean all && fc-cache -fv
验证是否生效
进容器后运行:
locale # 看 LANG 是否为 C.UTF-8 fc-list :lang=zh | head -3 # 看是否列出中文字体(如文泉驿、Noto Sans CJK)
特别注意初始化 SQL 或日志文件的编码
MySQL 容器挂载 .sql 文件时,文件本身必须是 UTF-8 编码(无 BOM),且开头加上:SET NAMES utf8mb4;
否则即使容器编码正确,导入数据仍会乱码。
不复杂但容易忽略

















