| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/05/2004 23:56:19
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5106
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Um assunto para discussão: em sites só para brasileiros devemos usar ISO-8859-1 ou partimos logo para UTF-8. Abaixo coloco uma série de considerações cuja maior parte vale para ambos os encodings apesar de que está feito para o UTF-8.
[color="darkblue"]Resumo dos passos para usar encoding UTF-8 em sites servidos pelo Tomcat:
1. Todas as páginas html devem começar por:[/color][color="darkblue"]
2. Os forms devem ser assim:[/color][color="darkblue"]
3. Os arquivos css devem começar por[/color][color="darkblue"]
4. Os arquivos xml devem começar por:[/color][color="darkblue"]
5. Os arquivos JSP devem conter:[/color][color="darkblue"]
6. Os scripts Catalina.bat (Windows) e catalina.sh (Unix) precisam do seguinte parâmetro (não documentado) para chamar o Java:[/color]
7. No server.xml é preciso alterar o atributo URIEncoding do conector Coyote HTTP/1.1 cujo default é ISO-8859-1 para UTF-8.
8. É preciso muita atenção com o método HttpServletRequest.setCharacterEncoding("utf-8"); que só se aplica ao body e NÃO à URI. E este método PRECISA ser chamado ANTES de pegar os parâmetros e por isso não funciona quando há um filtro que chama antes request.getParameter()[color="darkblue"]
9. Considerar a seguinte importante diferença que há entre Tomcat 4 e Tomcat 5: O conector Coyote HTTP/1.1 tem um atributo useBodyEncodingForURI que setado para true usará o encoding do "request body" para decodificar os parametros que vem na URI
- O default é true para TC4 (desacordo com a espec. porém mantém consistência com versões antigas)
- O default é false para TC5 (cumpre a espec. mas pode exigir alterações em aplicações antigas)
10. E adicionalmente se pode usar um método mais ou menos como o abaixo para traduzir o que possa vir como iso-8859-1 para UTF-8
[/color]Se alguém discorda do resumo acima ou precisa acrescentar algum passo por favor se manifeste. Comentários e correções serão bem-vindos.
Depois de fixado o encoding temos um problema adicional: as senhas criptografadas na base de dados antes da mudança do encoding.
Perguntas:
1. Qual encoding usar?
2. Considerando uma base de dados sem nacionalizar o conjunto de caracteres (National Character Set default), quais problemas podem acontecer ao tentar modificar uma senha criptografada armazenada na base de dados antes das mudanças no encoding?
[]s
Luca
This message was edited 2 times. Last update was at 06/05/2007 21:01:36
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2004 23:59:37
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5921
Localização: São Paulo
Offline
|
Muito bom. Alguns pontos eu nao sabia, e os outros acabei aprendendo na marra, quando alguns russos e chineses comecaram a reportar fatos que o jforum estava dando altos paus com caracteres cirilicos ( ainda da alguns hehehe ).
Em relacao ao banco de dados, ainda haveria o problema do db nao suportar o encoding, nao?!.. ( e uma eventual "migracao" de caracteres seria uma opcao? )
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2004 00:06:36
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7769
Localização: London, UK
Offline
|
Sticky'd. Muito bom esse post, Luca! Parabens
Quanto as suas duvidas, o melhor encoding para os casos em que vc nao sabe bem ao certo qual eh o caso eh UTF-8, por ser 100% compativel com o codigo ASCII, e ser o mais usado em aplicacoes internacionalizadas por suportar todo o character set Unicode (coisa que, se nao me engano, encodings como ISO-8859-1 sambam um pouco).
Eu nao sei se faz muito sentido guardar senhas num banco de dados sem passar por um md5 antes, e como o md5 geralmente eh feito no lado Java da coisa, eh facil manter o encoding uniforme. Para os outros dados que podem vir com o encoding errado, eh soh especificar qual o encoding que voce quer para o driver JDBC, caso ele suporte isso, ou fazer uma migracaozinha (que, em alguns casos, como o do PostgreSQL, requer dropar a base de dados, recriar com o encoding certo e importar os dados novamente).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2004 00:15:11
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5921
Localização: São Paulo
Offline
|
Em relacao ao usar md5 tudo bem, mas a representacao interna de um utf-8 nao eh diferente da representacao de um iso? digo, o codigo md5 gerado nao seria diferente? ( no caso de ja ter coisas onde foi gerado o md5 usando iso, e depois passa a ser usado caractered utf )
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2004 00:28:43
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5921
Localização: São Paulo
Offline
|
Tem ainda o
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2004 13:32:29
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4059
Localização: São Paulo
Offline
|
Vale algumas outras notas importantes:
-Os fontes java da aplicação devem ser desenvolvidos usando o dado encoding e o compilador informado desse encoding.
-No caso de uso de JSP's e tomcat5 precisa mexer no build.xml dele para passar o encoding dos fontes, com o 4 não sei exatamente qual o parametro.
-Sempre que usar Reader/Writers, obter primeiro um In(out)putStream e converter para um reader fornecendo o devido encoding, dessa forma fica mais portavel que usando -Dfile.encondig...
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2004 23:04:12
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5106
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Rafael, obrigado pelo acréscimo.
CV, na verdade meu problema com senha criptografada foi o que originou meu estudo de encoding. Tudo começou com uma aplicação que rodava no Linux e criptografava a senha usando a biblioteca BouncyCastle. Esta mesma aplicação rodando no Windows encripta a senha para algo diferente do que foi armazenado pelo Linux no Oracle.
Louds, o parametro na linha de comando -Dfile.encoding=UTF-8 serve justamente para os JSPs. O parametro do web.xml javaEncoding (Java file encoding to use for generating java source files) já tem UTF-8 como default. Este mesmo parametro já existia no tomcat 4.1 também com default UTF-8.
Quanto as suas dicas sobre os Reader/Writers se entendi bem com Java 1.4 para obter um Reader devemos obter primeiro um InputStreamReader e passar um java.nio.charset.Charset
no construtor. Algo como está abaixo usando o construtor InputStreamReader(InputStream in, Charset cs):
É isso?
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2004 20:08:04
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4059
Localização: São Paulo
Offline
|
Luca wrote:Olá
Quanto as suas dicas sobre os Reader/Writers se entendi bem com Java 1.4 para obter um Reader devemos obter primeiro um InputStreamReader e passar um java.nio.charset.Charset
no construtor. Algo como está abaixo usando o construtor InputStreamReader(InputStream in, Charset cs):
É isso?
[]s
Luca
Sim.
Luca, o javac le os arquvos no encoding nativo, então vc tem que passar na linha de comando -encoding=utf-8 para funcionar corretamente, eu tenho um ambiente quase com a mesma configuração sugerida por voce, mas não tenho como usar o -Dfile.encoding porque o mesmo servidor tem aplicações feitas com encodings diferentes (e algumas que foram feitas por pessoas que não entendem encodings).
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2004 09:05:03
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 3112
Localização: São Paulo
Offline
|
luca
quando voce criptografar algo, nao mande o array de bytes para o construtor da string, isso da uma dor de cabeca por causa do char encoding.
o que eh legal fazer eh gerar, atraves desses bytes, uma sequencia hexadecimal. ai nao tem erro!
|
http://blog.caelum.com.br
Arquitetura e Design de Software: uma visão sobre a plataforma java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2004 09:28:24
|
dukejeffrie
Virtual Machine Man
![[Avatar]](/images/avatar/c74d97b01eae257e44aa9d5bade97baf.png)
Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline
|
Que thread linda, pena que tá em português!!
Eu pensei que o javac gerava as strings internas sempre em UTF-8...
Aqui dá bastante problema com o CVS, a gente comita, e quando volta vem zuado...
[]s
|
Brevity is the soul of wit |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2004 09:40:29
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5106
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Duke
Abaixo o cvswrappers que uso:
Caso use Linux no servidor do cvs pode ajeitar o encoding em um arquivo que no caso do fedora fica em /etc/sysconfig/i18n. Outras distribuições tem coisa semelhante.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2004 14:36:19
|
Sergio Lopes
Moderador
![[Avatar]](/images/avatar/8232e119d8f59aa83050a741631803a6.jpg)
Membro desde: 17/11/2003 00:22:10
Mensagens: 1016
Localização: São Paulo - SP
Offline
|
mais uma questão sobre encoding e Web: XMLHttpRequest. eu pelo menos estou tendo uma dor de cabeça imensa ao usar essa classe pra postar dados. mesmo colocando o encoding pra iso-8859-1 (no meu caso está tudo em iso-8859-1) qdo envio algo via POST sempre vai como utf-8. eu não sei onde está definido isso, mas não adianta mandar como iso-8859-1 (estou tendo q usar um remendo na hora de receber os dados do POST e converter tudo pra iso-8859-1).
minhas tentativas vãs sao era mais ou menos assim:
PS1 se alguem souber como arrumar, diga. senão fica dado o recado.
PS2 se vc nao sabe o q eh XMLHttpRequest, eh uma classe JavaScript que permite enviar ou receber dados (embora o nome, nao necessariamente XML). no IE chama-se Msxml2.XMLHTTP
|
Sérgio Lopes
Caelum - Curso Java |
Apostilas Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2005 12:25:25
|
silvionetto
Thread.start()
![[Avatar]](/images/avatar/f5cfbc876972bd0d031c8abc37344c28.jpg)
Membro desde: 14/06/2005 09:57:12
Mensagens: 38
Offline
|
louds wrote:Vale algumas outras notas importantes:
-Os fontes java da aplicação devem ser desenvolvidos usando o dado encoding e o compilador informado desse encoding.
-No caso de uso de JSP's e tomcat5 precisa mexer no build.xml dele para passar o encoding dos fontes, com o 4 não sei exatamente qual o parametro.
-Sempre que usar Reader/Writers, obter primeiro um In(out)putStream e converter para um reader fornecendo o devido encoding, dessa forma fica mais portavel que usando -Dfile.encondig...
Consegui resolver esse problema criando um filtro no web.xml
This message was edited 1 time. Last update was at 23/06/2005 20:02:24
|
SilvioNetto |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/09/2008 18:27:24
|
pgnt
HelloWorld
Membro desde: 18/01/2007 04:27:33
Mensagens: 20
Offline
|
Para quem já tentou as opções acima, tem essa que resolveu meu problema (que tive usando Struts2 onde, no Struts1.3.8 eu não tinha esse problema)
colocar no struts.properties: struts.i18n.encoding=ISO-8859-1
abs
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/01/2009 02:19:26
|
dark123
JavaEvangelist
Membro desde: 30/04/2008 18:02:02
Mensagens: 315
Offline
|
Em meu projeto web, o formulário envia dados para o banco e recebe com caracteres assim: á para os acentos á e ã para os acentos ã.
Já tentei utilizar accept-charset="iso-8859-1,utf-8" nos inputs mas também não deu certo.
Mudei a codificação do banco de latin1 para utf8 mas deu na mesma.
|
Esqueceram de avisar que o NetBeans 6.7 e ainda por cima somente com java e JEE era pra quem tivesse mais de 2 GB de RAM |
|
|
 |
|
|