Graphics.drawString()方法画中文字符出现乱码怎么解决?(急) 我在用Graphics.drawString()方法时,出现了乱码,这个该怎么解决啊?代码:g.drawString("中文",100,100); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没弄过,是不是字符编码的问题?在eclipse中设置如下:windows->Preferences...打开"首选项"对话框,左侧导航树,导航到 general->Workspace,右侧Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8。 可能是eclipse的编码设置问题, 参考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) 通过验证程序,确定图片上的小方块正确显示为中文 打印图片中文乱码问题到这里就解决了。 用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(); } } 你先看一下,你的DOS下有没有中文乱码如果有的话,按照2楼的改就可以了,或者是写一个注册表文件导入就可以了。一般是这个问题。我之前也遇到过。 Hibernate取Session需要用单例吗? 学JAVA看些源码有用处吗? 请推荐一下应该读哪个java的开源项目的源码呢? java中如何接收C++中的dword bin(2进制数) 如何判断一个JFrame有没有被别的窗口遮住? 监控文件目录的变化 求教拉 如何将java程序制作成exe 集思广益:java_sqlServer ,b/s、c/s有经验的朋友进 一个头疼的问题,请对java多态性有深入了解的高手给予关注 java利用windows api控制麦克风音量?? Java中String型转Date毫秒可以转吗
windows->Preferences...打开"首选项"对话框,左侧导航树,导航到 general->Workspace,右侧Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8。
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) 通过验证程序,确定图片上的小方块正确显示为中文 打印图片中文乱码问题到这里就解决了。
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();
}
}
如果有的话,按照2楼的改就可以了,或者是写一个注册表文件导入就可以了。
一般是这个问题。我之前也遇到过。