ODBC-JDBC Bridge Windows-1251(西里尔文)字符编码

时间:2014-03-24 14:46:07

标签: jdbc character-encoding odbc dbase cyrillic

我有一个带有窗口1251编码的dbase文件。我为这个文件创建了一个ODBC数据源,我想用java的JDBC-ODBC桥访问它,代码如下:

PrintStream ps = new PrintStream(System.out, true, "UTF-8");
System.out.println("TEST: Русский язык");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Properties properties = new Properties();
properties.put("charSet", "windows-1251");
Connection conn = DriverManager.getConnection( "jdbc:odbc:test_ds",properties);
Statement statement = conn.createStatement();
String sql = "SELECT * FROM table";
ResultSet resultSet = statement.executeQuery(sql);

while (resultSet.next()) {            
        System.out.println(resultSet.getString("DESC"));
}

对于测试println(第2行),字符编码是正常的,但是来自dbase的数据编码不正确。

我能够使用相同的编码打开带有LibreOffice的dbf文件,其中一切正确。

有没有机会正确设置编码?

是否可以在连接字符串中设置连接编码?

编辑:经过进一步调查,我认为问题与ODBC有关。我试图用Excel打开定义的数据源,编码错误。 (我没有机会为odbc连接设置编码,也没有为Excel连接设置编码)

1 个答案:

答案 0 :(得分:0)

这适用于我的西里尔字符:

properties.put("charSet", "Cp1251");