使用 Java-JDBC 从 Oracle 数据库读取数据时的字符编码

Rag*_*van 3 java encoding jdbc utf-8 oracle10g

我们将数据存储在 oracle 10g db 中,其中包含法语字符集。要求是使用Java读取数据并生成输出文件。

我通过 SQL*plus 检查了 Oracle db 中数据的有效性,看起来不错。

从窗口:

set NLS_LANG=AMERICAN.AL32UTF8
sqlplus scott/tiger
sql>  select billing_address from MYTABLE t where ADDRESS_ID=1 ;
billing_address
-----------------------
MONTRÉAL QUÉ
Run Code Online (Sandbox Code Playgroud)

现在,当我从 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);
        }
Run Code Online (Sandbox Code Playgroud)

Jav*_*ker 5

有几件事要检查......

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

  • 第 1 点是特定于 MySQL JDBC 驱动程序的。他正在使用 Oracle。然而,这是一个寻找原因的好方向。 (2认同)