我在用Graphics.drawString()方法时,出现了乱码,这个该怎么解决啊?
代码:
g.drawString("中文",100,100);

解决方案 »

  1.   

    没弄过,是不是字符编码的问题?在eclipse中设置如下:
    windows->Preferences...打开"首选项"对话框,左侧导航树,导航到 general->Workspace,右侧Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8。 
      

  2.   

    可能是eclipse的编码设置问题,
      

  3.   

    参考http://www.javaeye.com/topic/2540151、是否字符编码问题为了检查获取的字符串的编码是否正确,使用下面的方式尝试多种字符集编码的转换,但是都没有效果; Java代码 
    String message=“...”;//ws获取到的信息   
    new String(message.getBytes("utf8"),"gbk");  String message=“...”;//ws获取到的信息
    new String(message.getBytes("utf8"),"gbk"); 回过来仔细考虑了一下我们的系统,系统的jsp页面及数据库编码都是采用的utf-8编码,无论是录入、保存还是显示都没有出现中文乱码问题;尤其是系统之间多处使用ws方式同步数据,也没有出现乱码问题,于是认为ws获取到的信息同样是utf-8编码。为了验证这个想法,做了一个jsp页面,使用utf-8的方式显示获取到的信息,在不经过任何转换的前提下,正确显示中文。最终确定,不是字符集编码的问题。 2、是否打印过程发生了问题查看了JDK API的说明,发现在使用字体的时候,我没有特别设定,使用了默认字体。写了一个简单的输出平台默认字体的类,得到的字体却是一样的信息: Java代码 
    Default font:java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12]  Default font:java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12] 于是到网上查找“java drawString 中文乱码” 关键字信息,查找csdn的一条信息:http://topic.csdn.net/u/20080603/13/3590c1f9-30bc-4e4d-bb2a-ada472b05973.html。大家可以去看一下,我就不贴过来了。我的动作是:1) 指定打印到图片的字体为中文 Java代码 
    g2d.setFont(new Font("宋体", Font.PLAIN, 12));  g2d.setFont(new Font("宋体", Font.PLAIN, 12)); 2) 上传WinXp 中的宋体字体文件到服务器(Solaris)我的本地字体文件地址是“C:\WINDOWS\Fonts\simsun.ttc”,上传到服务器地址是:“/usr/jdk/instances/jdk1.5.0/jre/lib/fonts/simsun.ttc”3) 通过验证程序,确定图片上的小方块正确显示为中文 打印图片中文乱码问题到这里就解决了。
      

  4.   

    用unicode哇g.drawString("\u4e2d\u6587",100,100);怎么把中文转换成unicode呢?可以直接用下面的这个类public class unicodeChanging {   
        public static void main(String[] args) {   
            String s = "中文";   
            String tt = gbEncoding(s);   
           System.out.println(decodeUnicode(tt));   
       }   
      
      
       public static String gbEncoding(final String gbString) {   
            char[] utfBytes = gbString.toCharArray();   
            String unicodeBytes = "";   
           for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {   
                String hexB = Integer.toHexString(utfBytes[byteIndex]);   
                if (hexB.length() <= 2) {   
                   hexB = "00" + hexB;   
               }   
            unicodeBytes = unicodeBytes + "\\u" + hexB;   
           }   
        System.out.println("unicodeBytes is: " + unicodeBytes);   
            return unicodeBytes;   
       }   
      
       public static String decodeUnicode(final String dataStr) {   
            int start = 0;   
           int end = 0;   
           final StringBuffer buffer = new StringBuffer();   
        while (start > -1) {   
               end = dataStr.indexOf("\\u", start + 2);   
                String charStr = "";   
                if (end == -1) {   
                    charStr = dataStr.substring(start + 2, dataStr.length());   
              } else {   
                   charStr = dataStr.substring(start + 2, end);   
                }   
            char letter = (char) Integer.parseInt(charStr, 16); 
               buffer.append(new Character(letter).toString());   
            start = end;   
           }   
           return buffer.toString();   
        }   
    }  
      

  5.   

    你先看一下,你的DOS下有没有中文乱码
    如果有的话,按照2楼的改就可以了,或者是写一个注册表文件导入就可以了。
    一般是这个问题。我之前也遇到过。