我的MYSQL数据库中有一表tablea 其中字段name 为中文数据
tablea 的编码为系统默认的latin1_swedish_ci
在PHP中读写都正常
但是到了JAVA中不能正常显示
使用getByes转换却发现有些汉字转换不过来~555555555555
Statement stmt;
ResultSet rst;
stmt=conn.createStatement();
rst=stmt.executeQuery("select name from tablea where id=346");
while(!rst.isLast()){
rst.next();
System.out.println("name:"+new String(rst.getString("name").getBytes("ISO-8859-1"),"UTF-8"));
}
这是我写的代码
正常输出应该是:
name:电脑硬件
而实际输出为:
name:�??��??硬件该怎么转呢?

解决方案 »

  1.   

    而实际输出为:
    name:�??��??硬件
    ~^~ 被CSDN转义了
    实际结果就是电脑两个字变成乱码了
      

  2.   

    数据库里直接取出来rst.getString("name")输出是乱码?
    System.out.println("name:"+new String(rst.getString("name").getBytes("ISO-8859-1"),"gbk"));
    试试行不~~
      

  3.   

    里直接取出来rst.getString("name")输出是乱码System.out.println("name:"+new String(rst.getString("name").getBytes("ISO-8859-1"),"gbk"));
    换成GBK也是乱码
      

  4.   

    你MYSQL的默认编码格式有修改过没?
    你连SQL的代码贴出来看下
      

  5.   

    默认编码没有修改过
    表和字段的编码都是latin1_swedish_ci
    连接代码:
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mysearch?user=root&password=123456");
      

  6.   

    ....
    我发现用outputstreamwriter输出正确但是我不知道怎么从outputstream写到String里面?
    OutputStreamWriter out =new OutputStreamWriter(System.out,"utf-8");
    byte[] bytes;
    while(!rst.isLast()){
    rst.next();
    bytes=rst.getBytes("name");

    out.write(new String(bytes));
    //System.out.println("name:"+new String(rst.getString("name").getBytes("ISO-8859-1"),"UTF-8"));
    }
    out.flush();
    out.close();这样写控制台输出居然是对的