2013-11-26 2 views
1

У меня есть Java-программа, которая должна получить доступ к базе данных в Firebird с кодировкой DOS437.конвертировать в Java DOS437 в UTF8

Мне нужно преобразовать результат запроса в UTF8, как я могу это сделать?

Мой код в Java:

public List<Proceso> ObtenerListaProcesos() throws SQLException { 
    List<Proceso> procesos = new ArrayList<>(); 
    Proceso proceso = null; 
    Connection conn = null; 
    ResultSet rs = null; 
    String query = "select * from procesos where prc_web='V' and prc_valido='V' and prc_valido_fabrica='V' and prc_suplemento_Acabado='F' and prc_codigo!='-' order by prc_descripcion;"; 
    String textoProceso=""; 
    try { 
     conn = this.abrirConexion(); 
     PreparedStatement p = conn.prepareStatement(query); 

     rs = p.executeQuery(); 
     while (rs.next()) { 

      proceso = new Proceso(rs.getString("PRC_CODIGO"), 
        rs.getString("PRC_DESCRIPCION")); 

      procesos.add(proceso); 
     } 

    } catch (Exception e) { 
     log.error("Error en ObtenerListaProcesos: " + e.getMessage()); 
    } finally { 
     this.cerrarConexion(conn); 
    } 

    return procesos; 
} 

я имею кодировку в связи Жар:

<conexionServidor>jdbc:firebirdsql:servidor/3050:F:/apps/GESTIONGYM2004/BD/BDGYM.FDB</conexionServidor> 
<userBD>SYSDBA</userBD> 
<passBD>masterkey</passBD> 
<encodingBD>DOS437</encodingBD> 

мне нужно записать результат запроса в UTF-8, чтобы показать в html-файле, но если вы используете: new String (rs.getBytes ("columnname"), "Cp437"), результат не в UTF-8.

+3

Пожалуйста, проверьте [это] (http://stackoverflow.com/a/13163986/655756) ответ для того, чтобы установить правильную кодировку в драйвере JDBC , и дальнейшее преобразование в UTF-8 в Java должно быть автоматически. – n1ckolas

ответ

3

Предполагая, что ваша база данных имеет набор символов по умолчанию (или каждый (VAR) CHAR-столбец, свой специальный набор символов), вам просто нужно указать набор символов соединения, а Firebird транслитерирует из кодировки хранилища в кодировку соединения; это может быть любой набор символов, который включает полный репертуар DOS437 (например, UTF8, а также сам DOS437).

Если ваша база данных не имеет набора символов по умолчанию (это NONE) или столбцы с данными имеют набор символов NONE, то не будет полностью автоматической транслитерации, и вам нужно будет явно указать набор символов соединения DOS437 и Jaybird будет обрабатывать преобразование.

Вы можете указать набор соединения символов с помощью свойства соединения encoding (который принимает Firebird набора символов имя) или charSet (который принимает набор символов имя Java), например:

jdbc:firebirdsql://localhost//path/to/db.fdb?encoding=DOS437 

Вы упоминаете, что вы хотите преобразовать в utf8, но это не имеет значения. Вам просто нужно, чтобы Jaybird читал данные в правильном наборе символов, чтобы получить правильные символы в Java. После этого это просто вопрос, как написать UTF-8 в пункт назначения.

Если у вас есть особые требования и указание набора символов соединения невозможно, вы можете сделать преобразование самостоятельно, используя new String(rs.getBytes("columnname"), "Cp437"), но это должно быть только в крайнем случае.

Отказ от ответственности: Я разработчик JayBird (драйвер JDBC) Firebird