Problema com caracteres especiais

Estou com problemas em exibir os caracteres especiais ( ç ~ ´ ` ) em uma página JSP corretamente. O início do JSP está assim:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" session="false" import="java.sql.*" import="java.util.*" %>
<!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>Buscar</title>
</head>

e no meio do JSP, eu imprimo as seguintes informações, vindas de uma base de dados MySQL configuradas em latin1:

					<tr>
						<td> <center> <h5>Nome</h5> 							</center> </td>
						<td> <center> <h5>Marca</h5> 							</center> </td>
						<td> <center> <h5>Modelo</h5> 							</center> </td>
					</tr>
					
			<%		
					Connection con = null;
					con = ConnectionFactory.getEquipamentosDataBaseConnection();
			
					String sql = (String) request.getAttribute("sql");
					
					PreparedStatement stmt = con.prepareStatement(sql);
					ResultSet rs = stmt.executeQuery();
										
					while( rs.next() ){
			%>
						<tr>
							<td><%= rs.getString("nome") %></td>
							<td><%= rs.getString("marca") %></td>
							<td><%= rs.getString("modelo") %></td>
						</tr>
			<%
					}
							
					rs.close();
					stmt.close();
					con.close();
			%>
					</table>

Assim que a página é carregada, tanto no Firefox quanto no Opera, os caracteres especiais (acentos, cedilhas…) não aparecem. Em seu lugar aparecem coisas como “éõçõá ì”

A questão é a seguinte: se eu vou (no Firefox) em “View -> Character Encoding” está marcado “Western (ISO-8859-1-)” o que, ao meu ver, está perfeitamente correto pois eu setei esse formato no início do JSP. Porém, se eu mudar (no Firefox) para “UTF-8” e der um reload na página, os caracteres especiais passam a aparecer corretamente!

Assim, eu resolvi mudar, na página JSP, todos os “ISO-8859-1” para “UTF-8”. Só que, dessa forma, os caracteres especiais também não apareceram corretamente! Indo (no Firefox) em “View -> Character Encoding” está setado “UTF-8” (como era para ser, pois setei isso no início do JSP). Porém, desta vez, os caracteres especiais não são exibidos corretamente!

Resumindo:

Colocando no cabeçalho JSP tudo ISO-8859-1 e não fazendo nada no Firefox, não funciona (os caracteres especiais são exibidos incorretamente)
Colocando no cabeçalho JSP tudo ISO-8859-1 e alterando manualmente no Firefox para UTF-8 (em “View -> Character Encoding” ), funciona. (os caracteres são interpretados corretamente)
Colocando no cabeçalho JSP tudo UTF-8, não funciona (os caracteres não são exibidos corretamente)

Também já tentei colocar no JSP, os seguintes códigos:

	request.setCharacterEncoding("ISO-8859-1");
	response.setCharacterEncoding("ISO-8859-1");  

Tentei os dois códigos acima tanto com ISO-8859-1 como UTF-8. Nada funcionou!

Não sei mais o que faço. Alguém tem alguma idéia?

Ninguém tem alguma idéia?

Bom… IGNORANDO esse seu esquema de código ao meu ver “bagunçado” … rs

Eu tenho o costume de deixar SEMPRE minhas aplicações em UTF-8 para não dar problema
verifique sua codificação do seu banco se está como utf-8, porque como vem de lá as informações… tem que bater com a codificação da jsp…
e deixe como utf-8 sua jsp…

Caro Tiago,

Já conseguiu resolver o problema? Espero que sim, mas caso ainda não tenha resolvido, passei por algo parecido e resolvi verificando estes passos:

  • Verifiquei se no banco os dados estavam sendo gravados de maneira correta, no caso, estavam, o problema era só na exibição.
  • Recuperei os dados vindos do banco usando "new String(rs.getString(“nome_do_campo”).getBytes(charsetBanco_iso-8859-1), charsetVisao_utf-8).

No seu código seria algo mais ou menos assim:

#   <tr>  
#      <td><%= new String(rs.getString("nome").getBytes("ISO-8859-1"), "UTF-8"); %></td>  
#      <td><%= new String(rs.getString("marca").getBytes("ISO-8859-1"), "UTF-8"); %></td>  
#      <td><%= new String(rs.getString("modelo").getBytes("ISO-8859-1"), "UTF-8"); %></td>  
#   </tr>

Até mais!