我用的是SQLSERVER2000的数据库,我将数据库的内容读出后,在cmd中显示是“????”,于是,我找到一个方法,如下
public synchronized static String fromDatabase(String change) throws
UnsupportedEncodingException {
return new String(change.getBytes("iso-8859-1"), "gb2312");
}
于是,我又
private Chinese toChinese = new Chinese();
toChinese.fromDatabase(Content) //Content为我从数据库中读取的内容
在cmd中还是显示“????”
然后我试着将fromDatabase方法改成(change.getBytes("utf-8"), "utf-8"),就可以正常显示了,可是我不明白为什么?
按照我的理解(change.getBytes("iso-8859-1"), "gb2312")这样写是取得change的iso-8859-1的编码,将其转换成gb2312的;而(change.getBytes("utf-8"), "utf-8")这样写就是取得change的utf-8的编码,将其转换为utf-8的,这不是多此一举吗?
也许是我把这个方法理解错了,请各位解释一下,谢谢。
public synchronized static String fromDatabase(String change) throws
UnsupportedEncodingException {
return new String(change.getBytes("iso-8859-1"), "gb2312");
}
于是,我又
private Chinese toChinese = new Chinese();
toChinese.fromDatabase(Content) //Content为我从数据库中读取的内容
在cmd中还是显示“????”
然后我试着将fromDatabase方法改成(change.getBytes("utf-8"), "utf-8"),就可以正常显示了,可是我不明白为什么?
按照我的理解(change.getBytes("iso-8859-1"), "gb2312")这样写是取得change的iso-8859-1的编码,将其转换成gb2312的;而(change.getBytes("utf-8"), "utf-8")这样写就是取得change的utf-8的编码,将其转换为utf-8的,这不是多此一举吗?
也许是我把这个方法理解错了,请各位解释一下,谢谢。
public String toGb(String uniStr){
String gbStr = "";
if(uniStr == null){
uniStr = "";
}
try{
byte[] tempByte = uniStr.getBytes("ISO8859_1");
gbStr = new String(tempByte,"GB2312");
}
catch(Exception ex){
}
return gbStr;
} public String toUni(String gbStr){
String uniStr = "";
if(gbStr == null){
gbStr = "";
}
try{
byte[] tempByte = gbStr.getBytes("GB2312");
uniStr = new String(tempByte,"ISO8859_1");
}catch(Exception ex){
}
return uniStr;
}
这是我写的编码的。一个是读取出来。一个是写入数据库。在resin里面。我这个东西全部是没有用的,写上后反而是乱码。但我在weblogic与tomcat里面用了很久都是非常正确的。
我刚查了一些资料,说数据库中的内容编码都是ISO8859_1的,可为什么我用ISO8859_1转换成GB2312不行,而用UTF-8转换成UTF-8就可以了呢。