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?
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.
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.
[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.
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.
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?
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.
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.