Кодировка символов при чтении данных с использованием Java-JDBC из базы данных Oracle - PullRequest
2 голосов
/ 31 июля 2010

У нас есть данные, хранящиеся в oracle 10g db, которое содержит французский набор символов. Требуется прочитать данные и сгенерировать выходной файл, используя Java.

Я проверил достоверность данных в Oracle db через SQL * plus, и все выглядит хорошо.

Из окон:

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

Ответы [ 2 ]

4 голосов
/ 31 июля 2010

Несколько вещей, чтобы проверить ...

  1. Ваш jdbc url должен иметь где-то ?useUnicode=true&characterEncoding=utf8
  2. В вашей JVM должны быть установлены все необходимые наборы символов
  3. Может быть, что-то происходит в коде для записи в файл / чтения из файла
    • Можете ли вы опубликовать часть своего Java-кода, если ваша проблема все еще сохраняется?
1 голос
/ 10 августа 2010

На самом деле проблема была в исходной кодировке, которая была установлена ​​при загрузке данных в базу данных Oracle.мы изменили кодировку в файле управления загрузчиком sql *, и теперь он работает нормально.

...