使用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); } 

要检查的几件事……

  1. 你的jdbc url应该在某个地方有?useUnicode=true&characterEncoding=utf8
  2. 您的JVM应该安装所需的所有不同的字符集
  3. 也许在代码中发生了写入文件/从文件读取的事情
    • 如果您的问题仍然存在,您可以发布一些Java代码吗?

实际上问题是在将数据加载到oracle数据库时设置的初始字符集。 我们在sql * loader控制文件中更改了charset,现在工作正常。