Eclipse的连接到MS Access的不可思议的编码行为

时间:2013-09-22 11:06:34

标签: java ms-access unicode encoding odbc

首先,我为这个问题道歉......我听到你说的另一个编码问题。

我一般都在网上查看并在档案馆中找到答案。

我在WXP OS上安装了Eclipse Indigo。我的Access版本很旧(Office 2000)。

我已经建立了一个与dbase的JDBC:ODBC连接,其中包含法语文本和重音符号。

我得到一个简单的ResultSet,在控制台和GUI中,“?”替换所有重音字符。我已经尝试将每个设置设置为“UTF-8”,包括Eclipse的.ini文件(-Dfile.encoding = UTF-8)。

如果我在应用程序代码中使用法语重音字符对字符串进行硬编码,则这些字符串在控制台和GUI输出中都可以正常打印。

到目前为止如此平庸。但是,当我运行OUTSIDE eclipse(即从CMD窗口)时,我会感到困惑的是,GUI组件可以完美地显示文本,并带有所有重音。虽然CMD窗口的任何输出都是乱码,但与Eclipse控制台的方式不同(例如“Ú”等字符替换所有重音字符)。

如果只有某种关于如何解决这类问题的诊断流程图......

修改

连接线:( ragbag是数据库的名称)...

  c = DriverManager.getConnection("jdbc:odbc:ragbag", "", "");

获得RS:

   stmtEntries = c.prepareStatement("SELECT * FROM tblFrEng WHERE French LIKE '%" + searchText + "%'",
          ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
   ResultSet rs = stmtEntries.executeQuery();

getString并设置GUI行:

   String[] row = new String[]{rs.getString(2),rs.getString(3) };
   ((DefaultTableModel)terms_table.getModel()).addRow( row ); 

EDIT2

更多“线索”:以下语句和参数列出了我系统中某个dbases中带有“é”的所有记录...但是当我去查看工作表中的表时,查看“é”显示为“Ô... 虽然还有其他记录,其中“é”在工作表视图中显示为“é”...但这些后面的记录并未被Like语句选中。 此外,工作的“通配符”字符是“%”,尽管Access中使用的通配符是“*”...无论如何。所有将此字符串放入SELECT语句(即无参数)的尝试都会失败。

  PreparedStatement stmtEntries = c.prepareStatement( "SELECT * FROM tblNodes WHERE   Title LIKE ?", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
  stmtEntries.setString( 1, "%é%");

1 个答案:

答案 0 :(得分:1)

  

当我然后去查看工作表视图中的表时,“é”显示为“Ô... ...虽然还有其他记录,其中“é”在工作表视图中显示为“é”...但是这些后面的记录没有被Like声明

选中

您显然在数据库中有一些记录,其中字符串被编码为单字节ANSI字符(显示为é)和其他记录,其中字符串被编码为多字节Unicode字符(显示为é)。在清理数据库之前,您应该会看到不一致的行为,以便TextMemo列中的所有字符串都以相同的方式编码。

如果我没记错的话,旧版本的Access预期文本将被编码为单字节字符(可能是Windows-1252字符集),而较新版本的Access期望字符串被编码为多字节Unicode字符。如果您打算使用非常旧的 Access 2000格式,您可能应该对单字节字符编码进行标准化。

您可能还希望确保Java中的默认字符编码与您在数据库中使用的字符编码相匹配。有关在Java中设置默认字符编码的更多信息,请查看here