首先,对于这个问题,我深表歉意。我听到您说的另一个编码问题。

我一般都在网上和这里的档案中寻找答案。

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

我已经建立了到dbase的JDBC:ODBC连接,该数据库中有法语文本和重音符号。

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

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

到目前为止,还很平淡。但是让我感到困惑的是,当我在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 );


编辑2

更多“线索”:以下语句和参数列出了系统中一个数据库中带有“é”的所有记录...但是当我随后去查看工作表视图中的表时,“é”显示为“ é“ ...
尽管还有其他记录在“工作表”视图中将“é”显示为“é” ...,但是Like语句未拾取这些后一个记录。
此外,尽管Access中使用的通配符仍然是“ *”,但是有效的“通配符”字符是“%”。所有尝试将此字符串放入SELECT语句(即无参数)的尝试均失败。

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

最佳答案

然后,当我在工作表视图中查看表时,“é”显示为“é”……尽管在工作表视图中还有其他记录“é”显示为“é” ...但这些记录Like语句未提取记录


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

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

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

关于java - 连接到MS Access的Eclipse难以想象的编码行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18943194/

10-09 05:42
查看更多