【发布时间】:2020-06-12 01:31:02
【问题描述】:
我正在使用西班牙语字符 ñ á é í ó ú 查询旧的 Access 97 数据库。我可以使用 access 很好地读取字符,所以我假设它使用 ISO-8859-1 但是我无法将它们转换为 UTF-8。
不确定我的问题是否与我的连接有关:
public static Connection baseAccess(String base) {
try {
java.util.Properties propiedades = new java.util.Properties();
propiedades.put("charSet", "ISO-8859-1");
return DriverManager.getConnection(String.format("jdbc:ucanaccess://%s", base),propiedades);
} catch (SQLException ex) {}
}
或者用我对字符串的解析:
try (ResultSet rs = UtileriaDb.baseAccess(contabilidad).createStatement().executeQuery(sql);){
while(rs.next()){
String fromAccess = rs.getString(1);
System.out.println(fromAccess);
String transformed = new String(fromAccess.getBytes("ISO-8859-1"),"UTF-8");
System.out.println(transformed);
}
} catch (Exception ex) { }
所以当我期望时:
Año 咖啡厅
我明白了:
咖啡厅
A?o 咖啡馆?
尝试通过执行以下操作从结果集中获取字节内容:byte[] fromAccess = rs.getBytes(1);,但出现异常
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.4 incompatible data type in conversion: from SQL type VARCHAR to [B, value: myText
at net.ucanaccess.jdbc.UcanaccessResultSet.getBytes(UcanaccessResultSet.java:339)
所以这是一个死胡同。有没有其他方法可以解决?
【问题讨论】:
-
您是在 CLI 还是 IDE 上运行它?
rs的类型是什么? -
类型是
java.sql.ResultSet刚刚更新了问题 sn-p 我正在将transformed字符串写入带有default charset=latin1的 mySql 表中,并且非 ascii 值也存储为?输出来自 netbeans 终端,也将尝试使用 bash 和 cmd -
我认为问题出在
rs.getString(1);我会使用byte[] bytes = rs.getBytes(1)而不是transformed = new String(bytes, 'ISO-8859-1'); -
好主意!但是我得到了一个
SQLExceptionincompatible data type in conversion: from SQL type VARCHAR to [B, value: myText。我不认为 ucanaccess 支持它。堆栈跟踪说在net.ucanaccess.jdbc.UcanaccessResultSet.getBytes(UcanaccessResultSet.java:339) -
下一个合乎逻辑的步骤将是您的假设“我假设它使用
ISO-8859-1”:)
标签: java database character-encoding resultset ucanaccess