我正在使用带有ISO-8859-1数据的Oracle数据库。 当我尝试使用ResultSet从此DB获取String并将结果打印到控制台时,我得到了错误的编码输出。
Locale.getDefault(); // -> fr_FR
Charset.defaultCharset(); // -> UTF-8
但我尝试从ResultSet
打印这些数据:
rs.getString("MY_COL"); // direct from ResultSet
new String(rs.getString("MY_COL").getBytes(Charset.forName("ISO-8859-15")), Charset.forName("UTF-8")); // convert ISO bytes to UTF-8 bytes
此输出:
générale
générale
那么,为什么Oracle JDBC驱动程序使用ISO-8859-1字节编码创建String? 如何在不更改数据库(也不转换String)的情况下获取UTF-8字节编码的字符串? 我可以从驱动程序配置中更改它吗?JMV args?
答案 0 :(得分:0)
我猜您的数据库不在ISO 8859-1中(NLS_CHARACTERSET = WE8ISO8859P1)。
在数据库
上create table foo (col1 varchar2(40));
insert into foo values('é');
insert into foo values(chr(233));
select dump(col1) from foo;
应该返回
Typ=1 Len=1: 233
Typ=1 Len=1: 233
如果你得到例如
Typ=1 Len=2: 195,169
Typ=1 Len=1: 233
然后您的数据库设置为UTF8(NLS_CHARACTERSET = AL32UTF8)。