我在Eclipse和Firebird数据库中有一个Maven JavaFX项目,其中 UTF-8 表编码(俄语表中的数据)。当我尝试使用命令jfx:run
从Eclipse运行它时 - 它已成功并且在TableView中我看到所有数据都是正确的。
但是,当我尝试使用命令jfx:native
和设置结果包创建本机安装程序时,TableView中的所有数据都是不正确的编码(通过Internet搜索获取提示,需要从 UTF-8转换数据到 WINDOWS-1251)。
从数据库填充数据的代码:
private class GetClientListTask extends Task<ObservableList<Client>> {
@Override
protected ObservableList<Client> call() throws Exception {
try (Connection connection = DriverManager.getConnection(App.DB_CONNECTION_STRING, App.DB_USERNAME, App.DB_PASSWORD)) {
com.zvpblog.KomstarService.model.jooq.tables.Client t = com.zvpblog.KomstarService.model.jooq.tables.Client.CLIENT;
DSL.using(connection).
selectFrom(t).
orderBy(t.CLIENTID.desc()).
fetch().
map(rs -> new Client(rs.getClientid(), DateTimeUtils.convertToLocalDate(rs.getRegdate()), rs.getLname(), rs.getFname(), rs.getMname(), rs.getGender(), DateTimeUtils.convertToLocalDate(rs.getBirthdate()), rs.getAddress(), rs.getPhone())).
forEach(c -> clients.add(c));
clientTableViewData = FXCollections.observableArrayList(clients);
return clientTableViewData;
} catch (SQLException e) {
LOGGER.error(e);
return null;
}
}
}
为什么运行模式编码是正确的,但在本机包中是不正确的?
答案 0 :(得分:1)
将连接属性charSet
和encoding
设置为UTF8
解决了从数据库填充数据并将数据插入数据库的问题。
...
Properties connectionProperties = new Properties();
...
connectionProperties.put("charSet", "UTF8");
connectionProperties.put("encoding", "UTF8");
...
Connection connection = DriverManager.getConnection(App.DB_CONNECTION_STRING, App.connectionProperties)
...