1

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

我已经在网上和这里的档案中查看了这个问题的答案。

我在 WXP 操作系统上有 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 ); 

编辑2

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

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

1 回答 1

1

然后当我去查看工作表视图中的表格时,“é”显示为“é”......虽然还有其他记录,其中“é”在工作表视图中显示为“é”......但后者Like 语句未拾取记录

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

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

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

于 2013-09-23T16:36:54.930 回答