使用Oracle数据库中的Java-JDBC读取数据时的字符编码
我们有数据存储在oracle 10g db中,其中包含法语字符集。 要求是使用Java读取数据并生成输出文件。
我通过SQL * plus检查了Oracle数据库中数据的有效性,看起来很不错。
来自windows:
set NLS_LANG=AMERICAN.AL32UTF8 sqlplus scott/tiger sql> select billing_address from MYTABLE t where ADDRESS_ID=1 ; billing_address ----------------------- MONTRÉAL QUÉ
现在,当我从Java读取表格以生成输出文件时,该字符都是乱码,我看到问号代替É。
当我尝试使用Java读取/写入数据时,是否需要设置任何特殊编码。
我使用ojdbc14.jar
并将编码设置为UTF-8。
更新 :这是我的java代码片段。
Charset cs1 = Charset.forName("UTF-8"); PreparedStatement pStmt = conn.prepareStatement("select * from talbe where address_id=1"); ResultSet rs = pStmt.executeQuery(); Writer w = null; FileOutputStream fos = null; if(rs.next()) { String billingaddress = rs.getString("BILLING_ADDRESS"); fos = new FileOutputStream(new File("myout.dat")); w = new BufferedWriter(new OutputStreamWriter(fos,cs1)); w.write(billingaddress); }
要检查的几件事……
- 你的jdbc url应该在某个地方有
?useUnicode=true&characterEncoding=utf8
- 您的JVM应该安装所需的所有不同的字符集
- 也许在代码中发生了写入文件/从文件读取的事情
- 如果您的问题仍然存在,您可以发布一些Java代码吗?
实际上问题是在将数据加载到oracle数据库时设置的初始字符集。 我们在sql * loader控制文件中更改了charset,现在工作正常。