JFreeChart和中文验证码的乱码问题和jsp的编码无关,是由于Java虚拟机找不到字体文件造成的,所以同类的Swing或者AWT的中文乱码问题也适用
通用的解决方法是:
解决方法1:
1.确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf
2. 在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
3. 确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
4. 确认/usr/share /fonts/zh_CN/TrueType目录下存在zysong.ttf
5. 在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
6. 重启resin服务器OK.
解决方法2:
1.将zysong.ttf复制到Java安装目录/jre/lib/fonts
2.修改Java安装目录 %JavaHome%/jre/lib/fonts下的font.ttf文件
修改首行的数字(数字+1)
在最后一行添加zysong.ttf -misc-zysong--medium-r-normal--0-0-0-0-c-0-GB18030
3. 将%JavaHome%/jre/lib/fontconfig.RedHat.3.properties.src文件,更名为fontconfig.properties;
4. 建立/usr/share/fonts/zh_CN/TrueType文件夹,拷贝zysong.ttf至该文件夹下.
5. 重启resin服务器OK.
以上方法引用地址:http://zhanghaoeye.iteye.com/blog/708211
解决方法3:
实在不行就将windows中的字体放到项目包中(最好classpath下,访问方便),自己创建字体.
Font中有两个方法可以创建自定义字体
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream input);
Font dynamicFont2 = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));
第一种(simsun.ttc在classpath下):
InputStream input = MyCharset.class.getResourceAsStream("simsun.ttc");
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, input);
input.close();
第二种:
Font dynamicFont2 = Font.createFont(Font.TRUETYPE_FONT, new File(MyCharset.class.getResource("/simsun.ttc").toURI()));
这样在自己的项目中就可以引用自定义的字体了。