荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: kid (努力), 信区: Java
标  题: [转载] 关于java中文问题的解释                 halu (转寄)
发信站: 荔园晨风BBS站 (Sun Dec  9 21:53:54 2001), 站内信件

【 以下文字转载自 kid 的信箱 】
【 原文由 waterid.bbs@bbs.xjtu.edu.cn 所发表 】
发信人: halu (halu), 信区: java
标  题: 关于java中文问题的解释
发信站: 交通大学兵马俑BBS站 (2001年07月17日15:39:25 星期二), 站内信件

关于java中文问题的解释
将这篇文章E_mail给我 | 返 回
关于JAVA中的中文问题的解释
java的javac和java这两个命令在编译和运行java程序时是会去检测系统字符集的,然后
会按照系统字符集来对字符进行转换。例如:当我们在西文系统中运行javac命令时,它
所选用的encode的字符集就是ISO8859_1,也就是说,它在编译的时候会将所有的ISO88
59_1的字符串转换成为Unicode,此时如果程序中有其他字符集的字符串,譬如GBK的中
文字串,则不做任何转换,仍然按照GBK的字符读入,而当它在西文平台下用java运行时
,又会将Unicode转换成ISO8859_1输出,并将GBK的字符正常输出。因此,在西文环境下
,中文可以正常的输出。如果在中文系统中运行javac 命令,则所有的GBK字符串会转换
成Unicode,而所有的ISO8859_1的字符串会保留,同样在输出的时候也将Unicode转换成
GBK字符集,因此也可以正常显示。
什么时候会出现中文乱码问题呢?
在JDBC Driver里,有些Driver会对从数据库中读出的中文自动地转换成Unicode,而有
些不会,如果Driver做过转换而系统又再做一次,就会出现问题,也就是常见的??,这
时,我们需要的就是在不同的平台下根据不同的情况去将数据库做的不需要的转换抵消
。举一个简单例子:
系统是西文平台,数据库的Driver做过GBK到Unicode的转换,这时候,我们程序中的中
文字串在javac后仍然是GBK码,而从数据库中读进的中文已经做过转换,也就是变成了
Unicode码,当我们用java去运行时就会将中文的Unicode转换成ISO8859_1,自然要出错
。这时,我们就需要自己将从数据库中读出的数据做一个Unicode到GBK的转换,因此就
可以正常输出了。所有的JAVA中文问题,都是因为这个原因,对于乱码的字符串,或者
做Unicode到GBK,或者做GBK到Unicode,就可以正常显示。具体用那种转换,还是要看
实际情况,一试便知。
下附转换类的源码:
import java.io.*;
public class TransFormat{
public static String unicodeToGB(String strIn){
byte[] b;
String strOut = null;
if(strIn == null || (strIn.trim()).equals(""))
return strIn;
try{
b = strIn.getBytes("GBK");
strOut = new String(b,"ISO8859_1");
}catch(UnsupportedEncodingException e){}
return strOut;
}
public static String GBToUnicode(String strIn){
     String strOut = null;
if(strIn == null || (strIn.trim()).equals(""))return strIn;
     try{
       byte[] b = strIn.getBytes("ISO8859_1");
       strOut = new String(b,"GBK");
     }catch(Exception e){}
    return strOut;
}
}
--
※ 来源:·交通大学兵马俑BBS站 bbs.xjtu.edu.cn·[FROM: master_linuxboy] --
※ 转寄:·交大兵马俑BBS站 bbs.xjtu.edu.cn·[FROM: 202.119.32.102]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.32.248]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店