在Java DOS437中转换为UTF8

时间:2013-11-26 12:30:20

标签: java firebird jaybird

我有一个Java程序需要使用编码DOS437来访问Firebird中的数据库。

我需要将查询结果转换为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;
}

我在firebird连接中有一个编码:

<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。

1 个答案:

答案 0 :(得分: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(Firebird JDBC驱动程序)的开发人员