阅读背景:

求解,java中graphics,drawstring乱码问题

来源:互联网 
java中graphics,drawstring('中文')乱码问题.
我的一段程序,使用graphics2D,在drawstring方法中,打印中文的时候,出现乱码,不知道怎么解决?
我用System.out.println(System.getProperty("file.encoding"));,打印 GBK
用了诸如下:
// tableName = new   String(table.getName().getBytes("UTF-8"));
//  tableName = new String(tableName.getBytes("UTF-8"),"GBK");
//  tableName = new String(tableName.getBytes("iso-8859-1"),"GB2312");
 tableName = new String(tableName.getBytes("GBK"),"UTF-8");
都是乱码,哪位有经验人士,能指点一二,谢谢!
分不是问题。我每2天开一贴,因为只能加200分。

18 个解决方案

#1


你这个要打印的中文是从哪里来的?
你直接打印显示什么?

#2


// tableName = new  String(table.getName().getBytes("UTF-8")); 
// tableName = new String(tableName.getBytes("UTF-8"),"GBK"); 
// tableName = new String(tableName.getBytes("iso-8859-1"),"GB2312"); 
tableName = new String(tableName.getBytes("GBK"),"UTF-8"); 
你用的这些方法 不出乱码就是不正常了

#3


呵呵,各位怎么解决。我在system下直接打印是中文。在Dialog中也是中文,就是在drawstring的时候,是乱码,急切求解!

#4


我也疑惑,帮顶一个

#5


先要知道你的中文是从哪里来的,什么编码,然后转换

或者你把中文转为byte[],用drawString(new String(byte[]))来显示,试试看吧

#6


jdlsfl
这个方法我也试过,还是不行

#7


统一编码 写一个方法


public String  changeToString(String str){

String s=str

byte temp[]=s.getBytes("ISO-8859-1");

s=new String(temp);

return s;
}


tableName=className.changeToString(table.getName());

#8


还是一个方框乱码,基本上,我找不出原因在哪,我现在怀疑我本身哪弄错了什么地方,否则不可能无解?

#9


还有一个问题就是,我直接drawstring("\u57f5\u57f5"),都是乱码
这是经转换的UTF-8中文

#10


我在JDK1.5下,没有找到font.properties配置文件,这个文件在JDK1。5哪?还是放在哪?user_font.properties?

今天刚加了100,只能加100,准备,另开题加分。

以上200分,大家先分享。

#11


楼主还是把源码贴出来吧,偶对GUI不太熟。。而且有源码的话更容易看到问题

#12


没记错的话
直接在代码里System.out.println("中文") 和 drawString("中文") (均是Unicode编码)出来的是 中文
Dialog里的话 应该gb2312(系统默认)
所以这里可能需要一个gb2312<->unicode转换

参考一下:
https://blog.csdn.net/zhouyong80/archive/2007/11/24/1900100.aspx

还是建议楼主把具体代码贴出来,看的不准,试了才知道-_-!

#13


方向错了,不是乱码问题,是字体不对,试试在  drawString 前先  setFont(new Font("宋体", Font.PLAIN, 30));

#14


代码很简单,tableName是从一个JDialog文本框输入的中文,如“国文”两字。

String tableName = table.getName(); //国文
// System.out.println(tableName);//这里打印显示出-国文

g.setColor(Color.BLACK);
g.drawString(tableName, x , y );//方框

我用过setFont(new Font("宋体", Font.PLAIN, 12));

#15


新开贴,加分,一天100.欢迎大家!

https://topic.csdn.net/u/20080603/13/3590c1f9-30bc-4e4d-bb2a-ada472b05973.html

#16


我也遇到过这种问题 是字体的问题 有些字体是不支持中文的 

#17


用默认的编码 
String temp = new String(example.getBytes());
我刚试过 成功

#18


https://topic.csdn.net/u/20080603/13/3590C1F9-30BC-4E4D-BB2A-ADA472B05973.html
JDK没有中文字体

 解决办法:
  第一步:下载中文字库,我使用的是simsun.ttc,可以直接在Windows(我用的是XP的系统)中找到,入径为C:\WINDOWS\Fonts下的simsun.ttc
  也可以在网站上下载 推荐天网网站:
  https://file.tianwang.com/cgi-bin/search?word=simsun.ttc

  第二步:将中文字库simsun.ttc放入Jre的字库中,操作如下:
  cd <JAVA_HOME>/lib/fonts或者cd <JAVA_HOME>/jre/lib/fonts
  mkdir fallback (fallback代表存放后备语言的文件夹)
  其中<JAVA_HOME>是你安装jdk/jre的路径,我的是/usr/lib/jdk1.5。复制或者链接一个中文字体至其下:
  ln -s /usr/share/fonts/truetype/simsun.ttf /usr/lib/jdk1.5/jre/lib/fonts/fallback/simsun.ttf

分享到: