问题描述
以下代码在,在本地测试时 ,可以正常输出中文字符的图片,但部署到线上时中文乱码
// 获取Graphics2D对象以支持更多绘图功能
Graphics2D g2d = combined.createGraphics();
// 示例字体、样式和大小
Font font = new Font("微软雅黑", Font.PLAIN, 30);
g2d.setFont(font);
g2d.setColor(Color.BLACK); // 文字颜色
g2d.drawString("中文字符串", textX, textY);
查了一圈 问题可能是以下两条
- 字体库不完整
- 编码设置不正确
解决方案
针对问题对代码进行了如下修改:
字体库不完整
- 确保你的服务器安装了包含中文字符的字体,例如Noto Sans CJK SC(简体中文)或Noto Sans CJK TC(繁体中文)。在Ubuntu上,可以使用apt-get命令安装:
sudo apt-get install fonts-noto-cjk
- 在Java代码中指定支持中文的字体。如果你已安装了Noto Sans CJK,可以修改setFont方法:
Font font = new Font("Noto Sans CJK SC", Font.PLAIN, 30);
编码设置不正确
在Java程序启动时添加 -Dfile.encoding=UTF-8 参数,确保系统默认编码是UTF-8
java -Dfile.encoding=UTF-8 -jar your_program.jar
按上述操作后,问题解决