设定数据库的字符集为中文后,存放取出再转转字符集看看从数据库中读出后转:
str=new String (str.getBytes("ISO-8859-1"),"gb2312");
写入数据库前转:
str=new String (str.getBytes("gb2312"),"ISO-8859-1");
str=new String (str.getBytes("ISO-8859-1"),"gb2312");
写入数据库前转:
str=new String (str.getBytes("gb2312"),"ISO-8859-1");
web 页面加入:
<%@ page contentType="text/html; charset=gb2312" %>
如果还不可以,就用如下函数转换
public static String UnicodeToChinese(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("ISO8859_1"),"gb2312");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}public static String ChineseToUnicode(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("gb2312"),"ISO8859_1");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
我已经进行过转码,
现在的情况是:
如果客户端是中文, 可以正常显示。(证明数据库中存储的也是正确的)
如果客户端是英文, 无论怎么转码都不行。
我试过
s = rst.getString("c");
s = new String(s.getBytes("ISO-8859-1"),"gb2312");
和
s = new String(s.getBytes("gb2312"),"ISO-8859-1");都不起作用
try ----------GBK
我对Solorias不熟悉,我记得是这样的: vi .cshrc —— 编辑环境
Lang c 改为 Lang zh 如果你懂unix,你一定就懂我的意思,我自己只能表达成这样了! :)然后你把转码去掉,试试看,我的系统虽然用的是JSP的B/S模式,不过我想对你的APPLICATION 应该也有用的!
我的客户端是Windows 2000英文版, 服务器是中文WinXP+中文SQLServer2000
这就是客户端ie的字符集支持问题,比如你访问一个日文网站,而你的浏览器不支持日文! 我也是这么认为的!
<%@ page contentType="text/html; charset=gb2312" %>
如果是servlet:
response.setContentType("text/html; charset=gb2312");
多谢您的回答, 不过不好意思, 我不大明白
"在程序中设置以下源数据的编码方式" 应该怎么做, 请详细一点好吗?
(注:这段语句以后我还会提到,以后用语句a代替)
byte[] b = rst.getBytes("c");
for (int i = 0; i <= b.length - 1; i ++) {
System.out.println(b[i]);
}
得到的应该不是?,
这样你使用str=new String (str.getBytes("c"),"gb2312");
应该能得到正确内容,但你说>我试过
>s = rst.getString("c");
>s = new String(s.getBytes("ISO-8859-1"),"gb2312");
>和
>s = new String(s.getBytes("gb2312"),"ISO-8859-1");
>都不起作用你这样做当然不起作用,你在使用s = rst.getString("c");时java就做了编码转换,因为英文平台默认使用了ISO-8859-1,所以s字符串中就已经都是?字符了。建议你分别在中文平台下和英文平台上分别测试 语句a(使用同一个.class文件,至关重要!,不要在不同的平台上分别编译),如果中文平台正常英文平台都是?,说明java在取得查询结果时就对字符型 的数据做了编码转换,
如果这样的话,你可以试试在编译原程序的时候加入编码信息,用法:
javac -encoding "gb2312"
如果这样都不行的话,可能在英文平台读取数据库中的中文信息就不行了,比如字节输入流在构造时可以取读取方的编码信息为参数,读取时自动转换,但是有些类不允许进行该设置,所以就会调用当前平台的默认编码,如果Statement类是这样不能设置编码信息的类(暂时我不知道如何设置),那就只能在数据库中使用二进制类型保存字符数据了,但是我觉得这种情况的可能性不大我暂时没做过跨平台开发测试,所以只能罗列了所有的可能,希望你能查出原因所在,解决问题
con 是建立连接的Connection 对象map.put("varchar", Class.forName("Byte"));
con.setTypeMap(map);这样可能在读取sql类型为varchar类型的数据时,会按照byte也就是字节读入,然后就可以自己进行编码转换了
map.put("varchar", Class.forName("Byte"));
con.setTypeMap(map);