Character encoding 使用iso-8859-1在wildfly中打开ucanaccess/Jackccess数据库

Character encoding 使用iso-8859-1在wildfly中打开ucanaccess/Jackccess数据库,character-encoding,wildfly,ucanaccess,jackcess,Character Encoding,Wildfly,Ucanaccess,Jackcess,我连接到wildfly 9.0.2中定义的MS Access 2000数据库。很好。使用命令行UCanAccess,我使用-Dfile.encoding=ISO-8859运行它,以便在Ubuntu上正确显示国家字符(挪威语)。在OSX上,命令行正确显示国家字符,无需任何jre选项。然而,Wildlfy实例也在OS X上运行,并且在任何基于java的sql客户机(如DBeaver或SQLSquirrel)中使用UcanAccess驱动程序,在字符集上都不能正确显示国家字符(目前它们只是在一个简单的

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

因此,有一种方法可以在Jackcess的jdbc url上指定一个特定的“opener”:

......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参数,并使用它重新回复了war。但wildfly抱怨:

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参数已被提取,但找不到该类,即使它与驱动程序的其他JAR一起部署。该类实际上位于jar文件中。但是我需要从其他JAR中的任何其他MANIFEST.INF类路径引用它吗?

情况似乎是,各种控制台都不显示国家字符。事实上,我必须指定在ubuntu命令行上运行的字符集,这让我相信这是个问题,在浏览器中而不是在日志控制台中显示数据就说明了这一点。对于特定的字符集,不需要jackcess“opener”。

将ISO-8859-1指定为字符集应该不是必需的。Access多年来一直将文本存储为Unicode。如果在Access中打开数据库,文本是否正确显示?如果是的话,它是什么版本的Access?它是Access 2000,字符在Access中显示正确,在Ubuntu上使用jvm选项-Dfile.encoding=ISO-8859运行的UCanaAccess命令行中显示正确。在OS X上,不需要UCanAccess命令行的此选项。我现在使用的Wildfly实例正在OS X上运行,不能正确显示国家字符。“Wildlfy实例也在OS X上运行,不能正确显示国家字符(目前它们只是在一个简单的测试中写入控制台)”-也许OS X控制台只是将一些Unicode字符显示为
,误导了您。我见过Windows命令提示符这样做。如果是这种情况,那么您应该以Unicode格式检索文本,并确保您的应用程序能够正确处理Unicode字符。@Gord,是的,正确地测试它,例如,在我的应用程序的gui中显示数据工作正常,国家字符可用,等等。只是IntelliJ控制台中显示的日志输出处于“关闭”状态。谢谢