2009-10-07 57 views
-1

我的问题是下一个代码有什么问题?我试图用j2ee从数据库中读取一些unicode,并将一些字符作为着名的问号返回。Java Unicode问题

尝试 Class.forName(“com.mysql.jdbc.Driver”); String connectionUrl =“jdbc:mysql:// localhost/hortimart?” + “user = webservices & password = stipjeservers”; Connection con = DriverManager.getConnection(connectionUrl);

 Statement stmt = null; 
     ResultSet rs = null; 
     String SQL = "SELECT FirstName,LastName FROM users"; 

     stmt = con.createStatement(); 
     rs = stmt.executeQuery(SQL); 

     while (rs.next()) 
     { 

      byte[] firstNameBytes = rs.getBytes(1); 
      String FirstName =new String(firstNameBytes,"UTF-8"); 
      byte [] lastNameBytes = rs.getBytes(2); 
      String LastName =new String(lastNameBytes,"UTF-8"); 
      System.out.println(FirstName+" "+LastName); 

     } 

    } 
    catch (SQLException e) 
    { 
     System.out.println("SQL Exception: "+ e.toString()); 
    } 
    catch (ClassNotFoundException cE) 
    { 
     System.out.println("Class Not Found Exception: "+ cE.toString()); 
    } 

现在我已经试过这个代码与j2Se以及它的作品。那么它是j2EE还是我错过了我的代码?

感谢

+0

我使用一个集成的Tomcat6.0服务器来使用NetBeans。对于我的数据库我使用EasyPHP 3.0。也许这有助于 –

回答

0

尝试添加的characterEncoding = UTF-8到您的连接网址。 即:

String connectionUrl = "jdbc:mysql://localhost/hortimart?" + "user=webservices&password=stipjeservers&characterEncoding=utf-8 
+0

不幸的是结果是相同的 –

0

知道如果字符串已经在UTF-8编码了(Unicode的包括许多编码,UTF-8只有其中之一是)。你有没有尝试过使用简单的rs.getString(1)

+0

是的,我试过了,它得到了问号。 –

0

它可能是i)数据库中的数据不是unicode(您的表格是如何定义的?)或ii)您的驱动程序不支持unicode。

编辑:您是否尝试过在连接字符串中同时设置useUnicode和characterEncoding?

...useUnicode=true&characterEncoding=utf8 
+0

字段的类型是varchar,Collat​​ion设置为utf8_unicode_ci(unicode多语言,不区分大小写) –

+0

useUnicode = true&characterEncoding = utf8 这不起作用或者 –

2

这是最有可能您控制台这是错误配置。您是否检查过结果的字节以查看其是否为UTF-8?

+0

我没有收到UTF-8。所有我得到的数字是这样的-72 -48 -67 -48 -77 -48这似乎是正确的,因为我在j2me中获得了与j2se中相同的数字并且在j2se中字符显示正确 –

+1

如果它们是相同的数字在两个地方,这些数字按照预期显示在一个地方,那么它就是**显示**,正如我所建议的那样,它被打破了,而不是编码。 UTF-8 **是一系列“数字”,必须将其解码并解释为Unicode代码点,以显示为人类可读的字形。 –

+0

我使用NetBeans,这两个地方之间的唯一区别是:在一个简单的Java项目中它工作(j2se),但在一个web项目中它不(j2ee)。 –