首先,我为这个问题道歉......我听到你说的另一个编码问题。
我一般都在网上查看并在档案馆中找到答案。
我在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, "%é%");
答案 0 :(得分:1)
当我然后去查看工作表视图中的表时,“é”显示为“Ô... ...虽然还有其他记录,其中“é”在工作表视图中显示为“é”...但是这些后面的记录没有被Like声明
选中
您显然在数据库中有一些记录,其中字符串被编码为单字节ANSI字符(显示为é
)和其他记录,其中字符串被编码为多字节Unicode字符(显示为é
)。在清理数据库之前,您应该会看到不一致的行为,以便Text
和Memo
列中的所有字符串都以相同的方式编码。
如果我没记错的话,旧版本的Access预期文本将被编码为单字节字符(可能是Windows-1252
字符集),而较新版本的Access期望字符串被编码为多字节Unicode字符。如果您打算使用非常旧的 Access 2000格式,您可能应该对单字节字符编码进行标准化。
您可能还希望确保Java中的默认字符编码与您在数据库中使用的字符编码相匹配。有关在Java中设置默认字符编码的更多信息,请查看here。