Blob para string com codificação ISO-8859-1 [RESOLVIDO]

Olá galera,

Estou tendo um problema de codificação com dados vindos do banco de dados com campo BLOB
Os caracteres com acentuação esta saindo errados, estou convertendo blob para string e inserindo em uma textarea

Acredito que esteja faltado definir uma codificação na saida dos bytes, alguem tem alguma dica?

Vlw!

<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


<title>:: TESTE::</title>
    </head>
    <body>


<%
Blob blob = rs.getBlob("OBS");
InputStream in = blob.getBinaryStream();
StringBuilder ret = new StringBuilder();
int lidos=0;
byte[] b = new byte[2048];
String temp = null;
while ( (lidos=in.read(b)) != -1){
      temp = new String(b,0,lidos);
     ret.append(temp);

%>

<table width="615" border="1">
<tr>
  <tr>
            <th width="152" height="47" scope="row">TEXTO</th>
            <td width="449"><form name="form1" method="post" action="">
              <label>
                <textarea name="servico" id="servico" readonly="true" cols="60" rows="5"><%=ret.toString()%></textarea>
              </label>
            </form></td>
      </tr>
          
        </table>


Quando você exibe o conteúdo no System.out exibe corretamente?

System.out.println(ret.toString());

[quote=Leandro Carvalho]Quando você exibe o conteúdo no System.out exibe corretamente?

System.out.println(ret.toString());

[/quote]

Também não exibe Leandro, agora se eu pego um campo do banco de dados VARCHAR, ai ele exibe certinho,

utilizo a seguinte string de conexão com o banco de dados firebird


   Class.forName("org.firebirdsql.jdbc.FBDriver");
				   Connection conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:c:/DADOS/DADOS.FDB?lc_ctype=WIN1252", "SYSDBA", "masterkey");

Então o problema não é o encoding da sua página JSP. Nem a saída de dados.

Existe alguma forma em que você consegue ler estes dados corretamente para validarmos que os caracteres estão gravados corretamente?

Procure alternativas diferentes de parâmetro ao invés do “WIN1252”, em:

DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:c:/DADOS/DADOS.FDB?lc_ctype=WIN1252", "SYSDBA", "masterkey");

Talvez UTF-8 ou ISO-8859-1.

Boa sorte.

[quote=Leandro Carvalho]Então o problema não é o encoding da sua página JSP. Nem a saída de dados.

Existe alguma forma em que você consegue ler estes dados corretamente para validarmos que os caracteres estão gravados corretamente?

Procure alternativas diferentes de parâmetro ao invés do “WIN1252”, em:

DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:c:/DADOS/DADOS.FDB?lc_ctype=WIN1252", "SYSDBA", "masterkey");

Talvez UTF-8 ou ISO-8859-1.

Boa sorte.[/quote]

no banco de dados os dados do campo Blob estão gravados correamente, todos os outros campos VarChar estão exibindo normal os caracteres na pagina menos o Blob.

Acredito que este problema é parecido com esse topico: http://javafree.uol.com.br/topic-880277-AJUDA-MySQL-e-charset-collation-encode-RESOLVIDO.html

O cara resolveu o problema assim:

  // imcompleto  
    private static final String CHAR_SET = "UTF-8";  
    private static final String DB_URL = "jdbc:mysql://localhost/test";  
  
    public static void main(String[] args) {  
        int id = ?;  
        try {  
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());  
            Connection co = DriverManager.getConnection(DB_URL, "user", "pass");  
            {  
                PreparedStatement st = co.prepareStatement("select texto from fotos where id = ?");  
                st.setInt(1, id);  
                ResultSet rs = st.executeQuery();  
                while (rs.next()) {  
                    ByteArrayOutputStream bytes = new ByteArrayOutputStream();  
                    InputStream bs = rs.getBlob("texto").getBinaryStream();  
                    int ch;  
                    while ((ch = bs.read()) != -1) {  
                        bytes.write(ch);  
                    }  
                    bs.close();  
                    String texto = new String(bytes.toByteArray(), CHAR_SET);  
                    System.out.println(texto);  
                }  
                rs.close();  
            }  
            co.close();  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
  
    }  

Mais como eu fasso para fazer isso em JSP ?

aero_wil, não tenho certeza que irá funcionar mas tente algo do tipo:

 temp = new String(b, 0, lidos,"ISO-8859-1");

Se não der, tente com UTF-8, por exemplo.

[quote=marcos1EM]aero_wil, não tenho certeza que irá funcionar mas tente algo do tipo:

 temp = new String(b, 0, lidos,"ISO-8859-1");

Se não der, tente com UTF-8, por exemplo.[/quote]

Vlw Cara!!! resolveu meu problema

Abraço !