使用iso-8859-1

时间:2016-02-09 08:03:00

标签: character-encoding wildfly ucanaccess jackcess

我连接到wildfly 9.0.2中定义的MS Access 2000数据库。工作良好。使用命令行UCanAccess,我使用-Dfile.encoding=ISO-8859运行它,以便在Ubuntu上正确显示国家字符(挪威语)。在OS X上,命令行正确显示国家字符,没有任何jre-option。然而,Wildlfy实例也在OS X上运行,并且不显示正确的国家字符(目前它们只是在一个简单的测试中写入控制台)在任何基于Java的SQL客户端(如DBeaver或SQLSquirrel)中使用UcanAccess驱动程序“只是工作“说到字符集。但是,通过JPA和wildfly查询数据库,国家字符将替换为“?”。

所以,有一种方法可以在jdbc-url上为Jackcess指定一个特殊的“开启者”:

......mdb;jackcessOpener=ucaextension.JackcessWithCharsetISO88591Opener

“开启者”看起来像这样:

public class JackcessWithCharsetISO88591Opener implements JackcessOpenerInterface {
    public Database open(File f, String pwd) throws IOException {
        DatabaseBuilder db = new DatabaseBuilder(f);
        db.setCharset(Charset.forName("ISO-8859-1"));
        try {
            db.setReadOnly(false);
            return db.open();
        } catch (IOException e) {
            db.setReadOnly(true);
            return db.open();
        }
    }
}

(是的,异常处理至少应该发出警告。)

所以我把它打包成jar文件(maven),删除了wildfly中的旧连接,驱动程序和模块定义。然后我添加了这个jar文件,以及ucanaccess模块​​的其他文件(ucanaccess本身,hsqldb等),重新创建驱动程序和连接,现在使用opener-parameter,并使用它重新重新编写战争。但野蝇抱怨道:

Caused by: java.lang.ClassNotFoundException: ucaextension.JackcessWithCharsetISO88591Opener from [Module "com.ucanaccess:main" from local module loader @1060b431 (finder: local module finder @612679d6 (roots: /Users/jonmartinsolaas/Local/wildfly-9.0.2.Final/modules,/Users/jonmartinsolaas/Local/wildfly-9.0.2.Final/modules/system/layers/base))]

很明显,url-parameter已被选中,但找不到类,即使它与驱动程序的其他jar一起部署。该类实际上在jar文件中。但是我需要从其他jar中的任何其他MANIFEST.INF类路径引用它吗?

1 个答案:

答案 0 :(得分:2)

似乎情况是,各种控制台都没有显示国家字符。那个,以及我实际上必须在ubuntu命令行上指定运行charset的事实,让我相信存在问题,并且实际上在浏览器中显示数据而不是在日志记录控制台中显示数据。不需要为特定字符集设置一个“开启者”。