Problemas com acentuação

Olá,

Estou tendo problemas com acentuação e gostaria da ajuda do pessoal pra resolver.

Em algumas páginas de uma aplicação, os acentos são substituídos por “?” (apenas interrogação, não aparecem aqueles caracteres esquisitos). E não consigo descobrir porque isto ocorre.

O mais estranho é que em algumas páginas funciona e em outras não, sendo que nenhuma define no head um encoding específico.

Algumas características:

1 - Eu confiro pelo firebug como o meu POST está indo, a acentuação está presente normalmente.
2 - No banco de dados a acentuação já fica incorreta, não é problema no momento de recuperar.
3 - Se eu rodar a aplicação localmente, escrevendo tanto em um banco de dados local quanto no banco de dados do servidor, o acento fica correto.
4 - Se eu colocar uma página simples no mesmo diretório, que recebe um post e grava no mesmo campo do banco de dados, funciona corretamente.
5 - Já tentei colocar <%@ page pageEncoding=“ISO-8859-1”%> na página com problema, não resolveu.
6 - Já tentei colocar na página com problema, não resolveu.
7 - A aplicação utiliza struts 1.1

Já tentei todas as alternativas que eu lembrei e não consigo resolver.

Alguém tem alguma idéia do que está gerando problema?

Agradeço desde já pela ajuda.

Oi

Da uma olhada neste link

http://www.w3schools.com/tags/ref_entities.asp

acho que vai ajudar.

Você tem que ver qual é a codificação do seu banco de dados pode ser ele que está dando o problema, na hora que você faz a inserção com no banco que está o problema.

Olá,

Obrigado pelas respostas e pela atenção.

[quote=mapleplayer]Oi

Da uma olhada neste link

http://www.w3schools.com/tags/ref_entities.asp

acho que vai ajudar.[/quote]

Bom, tem alguma função java que converte caracteres com acentos para html?
Para os casos de editar estes mesmos campos também seria necessário uma função que, volta a representação html para a forma com acentos.

Você algo em java que já faça isto?

Acredito que não seja o banco de dados, pois eu consigo fazer insernções normalmente se a aplicação estiver rodando na minha máquina. Além disto, a página de teste que eu criei para fazer inserções no mesmo campo funciona corretamente.
O problema provavelmente está em outro lugar.

Quando você faz o insert no banco de dados os caracteres ficam normal?

Se não tiver normal, o problema é a codificação do banco, pois o seu banco não está reconhecendo o caracter inserido.

PS: Eu já tive um problema parecido com esse!

[quote=joede.fadel][quote=rafpv]
Acredito que não seja o banco de dados, pois eu consigo fazer insernções normalmente se a aplicação estiver rodando na minha máquina. Além disto, a página de teste que eu criei para fazer inserções no mesmo campo funciona corretamente.
O problema provavelmente está em outro lugar.
[/quote]

Quando você faz o insert no banco de dados os caracteres ficam normal?

Se não tiver normal, o problema é a codificação do banco, pois o seu banco não está reconhecendo o caracter inserido.

PS: Eu já tive um problema parecido com esse![/quote]

Fiz o teste e ficam sim.
Bom, na aplicação mesmo eu uso PreparedStatement, não sei se isto pode interferir na acentuação de alguma forma, mas quando rodo uma sql com acentuação grava corretamente.

Rafpv

Vamos começar do começo, os banco de dados também tem codificação de caracteres, eles são definidos na hora que você cria sua base de dados, de acordo com os itens 1 e 2 o problema e de codificação do Banco, conforme eu disse anteriormente.
Se os caracteres no banco ja estão incorretos, na hora que você for recuperar eles vão aparecer incorretos, se você roda sua aplicação localmente você não está utilizando a codificação de caracteres que utiliza na sua pagina web.

Faça o seguinte crie outra base de dados e mude a codificação para ver o que acontece.

Qual SGBD você está utilizando.

Bom,

Não sei se é isto que você está perguntando, mas o Collation do campo que está dando problema é latin1_swedish_ci.
Eu concordo que o problema está em algum momento entre o POST e a inserção no MySQL, que é o bd que estou usando.

o que eu acho estranho é o seguinte:

Meu campo que dá errado está como latin1_swedish_ci, só que em outra tabela na mesma base de dados, existe outro campo, também com latin1_swedish_ci que está dando erro.

Se eu abrir o phpmyadmin e fizer um insert na mão, a acentuação não da erro.

Por isto eu estou achando que não tem relação com o banco de dados, porque se fosse pra dar errado, teria que dar erro em todos os casos.

Se eu rodar a aplicação no tomcat da minha máquina, conectando no banco de dados do servidor. Funciona em 100% dos casos, nunca ocorre erro deste tipo. O que também me faz acreditar que não seja o banco de dados.

Estou certo nas coisas que falei? ou não funciona bem da forma que eu imagino?

Não existiria outra possibilidade para gerar este erro?

Agradeço pela atenção e pela ajuda.

Tente mudar a a codificação par latin1_general_ci que poderá resolver o seu problema.

De uma olhada no que é cada significa essas codificações

latin1_general_ci: Não há distinção entre letras maiúsculas e minúsculas. Buscando por ?teste?, registros como ?Teste? ou ?TESTE? serão retornados.
latin1_general_cs: Distingue letras maiúsculas e minúsculas. Buscando por ?teste? somente retornará ?teste?. Opções como ?Teste? e ?TESTE? não serão retornadas.
latin1_swedish_ci: Não distingue letras minúsculas e maiúsculas e nem caracteres acentuados e com cedilha, ou seja, o registro que contém a palavra ?Intuição? será retornado quando houver uma procura pela palavra ?intúicao?.

Dei uma pesquisada e vi que para o latin1 é melhor utilizar o CHARSET ISO-8859-1.

Eu mudei mas não resolveu não.

Coloquei latin1_general_ci no campo e na página com o formulário coloquei

Também tentei colocar o campo como utf8_general_ci, mas apareceu interrogação no banco de dados da mesma forma.

Alguma outra idéia do que seja?

Você sabe se um PreparedStatement pode bugar o caractere? Existe como definir um charset pra essa classe?

Muito estranho acontecer isso… você já tentou debugar o seu projeto para ver o que está sendo inserido, verifique como está o seu insert, de uma olhada nesses 2 links
http://pt.w3support.net/index.php?db=so&id=81323
http://pt.w3support.net/index.php?db=so&id=655891

Sim, está estranho demais.

Eu tentei debugar sim, só que o problema é que no meu computador tudo funciona perfeitamente.

Pra debugar o projeto no servidor mesmo eu não sei como que faz pelo netbeans, nem sei se tem como na verdade.

Bom, tudo funciona no Windows, e no servidor linux da erro. Pode ser algo bem específico relacionado ao sistema operacional.

O que é mais estranho ainda é existem partes na mesma aplicação que funcionam perfeitamente e partes isoladas que estão com este erro.

Vou olhar os links e ver se descubro algo.

Agradeço pela sua atenção.

rafpv, tente ver as configurações do seu servidor linux e do servidor windows, veja se ele trata alguma de forma diferente, caso o servidor seu seja o apache tomcat entre nesse site que ele explicas algumas coisas, pode te ajudar.