Java中文乱码&特殊字符解决方案
相信很多朋友遇到过Java的乱码问题,最近我也在解决一个“使用文本生成图片过程中中文以及特殊字符乱码”的问题;花了我大量时间,Debug了sun.font、sun.awt下面的各种源码,终于搞懂了其机制,解决了目前次问题;现在把问题解决过程给写下来,做个记录,以免以后再次遇到。
遇到的问题
下面是我想要执行的代码(经过极度简化,但是意思没变):
1 public static void main(String[] args) throwsIOException {2 File file = new File("test.png");3 Font font = new Font("宋体", Font.PLAIN, 10);4 BufferedImage bi = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);5 Graphics2D g2 =(Graphics2D) bi.getGraphics();6 g2.setBackground(Color.WHITE);7 g2.clearRect(0, 0, 400, 200);8 g2.setFont(font);9 g2.setColor(Color.BLACK);10 g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);11 g2.drawString("为什么没有(????)(????)这名字特殊不?@¥¥¥ 为什么没有(????)(????)这名字特 ", 0, 10);12 g2.dispose();13 ImageIO.write(bi, PNG, file);14 }
目标当然是想在打开test.png的时候看到如下场景:
在本地调试没问题之后,就放到了测试机(Linux)上面去执行了,执行结果简直扑街: