@TOC
在 Docker 容器中运行 Java 应用使用 Graphics2D 绘制中文时出现乱码,通常是因为容器缺少中文字体支持。以下是完整的解决方案:
FROM openjdk:8-jdk-alpine
# 安装中文字体
RUN apk add --update ttf-dejavu fontconfig && \
rm -rf /var/cache/apk/*
COPY your-app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
推荐
)FROM openjdk:8-jdk
# 安装中文字体
RUN apt-get update && \
apt-get install -y fonts-wqy-zenhei && \
rm -rf /var/lib/apt/lists/*
COPY your-app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
FROM openjdk:8-jdk
# 创建字体目录
RUN mkdir -p /usr/share/fonts/custom
# 复制本地字体文件到容器
COPY ./fonts/*.ttf /usr/share/fonts/custom/
# 刷新字体缓存
RUN apt-get update && \
apt-get install -y fontconfig && \
fc-cache -fv && \
rm -rf /var/lib/apt/lists/*
COPY your-app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
FROM openjdk:8-jdk
# 下载并安装思源黑体
RUN apt-get update && \
apt-get install -y wget && \
wget -O /tmp/source-han-sans.zip https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SourceHanSansSC.zip && \
unzip /tmp/source-han-sans.zip -d /usr/share/fonts/ && \
rm /tmp/source-han-sans.zip && \
apt-get remove -y wget && \
apt-get install -y fontconfig && \
fc-cache -fv && \
rm -rf /var/lib/apt/lists/*
COPY your-app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
确保你的 Java 代码中正确指定了可用字体:
// 列出所有可用字体
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontNames = ge.getAvailableFontFamilyNames();
System.out.println("可用字体: " + Arrays.toString(fontNames));
// 使用特定字体
Font font = new Font("文泉驿正黑", Font.PLAIN, 12);
// 或者
Font font = new Font("Source Han Sans SC", Font.PLAIN, 12);
// 或者
Font font = new Font("SimHei", Font.PLAIN, 12);
g2d.setFont(font);
进入容器检查字体是否安装正确:
docker exec -it your-container-name bash
fc-list :lang=zh
字体未生效:
字体缓存问题:
# 在容器中执行
fc-cache -fv
字体权限问题:
fonts-wqy-zenhei
或 ttf-wqy-zenhei
包这样通常可以解决 Docker 容器中 Graphics2D 绘制中文乱码的问题。
在 Ubuntu 系统上安装中文字体可以解决文档显示、图形渲染和应用程序中的中文乱码问题。以下是常见中文字体的安装方法。
sudo apt update
sudo apt install fonts-wqy-zenhei # 文泉驿正黑
sudo apt install fonts-wqy-microhei # 文泉驿微米黑
sudo apt install fonts-noto-cjk # 包含简体中文、繁体中文、日文和韩文字体
sudo apt install fonts-source-han-sans # 思源黑体
sudo apt install fonts-source-han-serif # 思源宋体
sudo apt install ttf-mscorefonts-installer
sudo fc-cache -fv # 更新字体缓存
sudo cp *.ttf /usr/share/fonts/
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv
# 查看所有已安装的中文字体
fc-list :lang=zh
# 查看特定字体族
fc-list | grep "WenQuanYi"
fc-list | grep "Noto Sans CJK"
# 安装常用中文字体合集
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk fonts-arphic-ukai fonts-arphic-uming
mkdir -p ~/.local/share/fonts
将下载的 .ttf 或 .otf 字体文件复制到此目录
更新字体缓存:
fc-cache -fv
# 检查特定字体是否可用
fc-match "WenQuanYi Zen Hei"
fc-match "Noto Sans CJK SC"
对于大多数中文显示需求,建议安装以下组合:
sudo apt install fonts-noto-cjk fonts-wqy-zenhei fonts-arphic-ukai fonts-arphic-uming
fc-cache -fv
命令更新字体缓存这些字体安装后,大多数中文显示问题都能得到解决,包括终端、办公软件、图形界面和开发工具中的中文显示。