Utilizo JSF com charset=UTF-8 e postgreSQL com charset=Latin1(ISO8859-1), e tudo funciona a contento. O que me intriga eh pq funcion, já que as páginas estão codificadas para UTF-8 e o banco para ISO8859-1. Não deveria dar erro?
Charset (UTF-8) x PostgreSQL (Latin1= ISO-8859-1) Responder com Citação
10 Respostas
Nao so deveria, como vai; experimenta usar caracteres que nao sao em comum entre UTF8 e Latin1 (Aramaico eh sempre uma boa pedida), e vc vai ver que a coisa explode.
pois eh mas se eu usar UTF-8 não funciona os caracteres acentuados na página e mesmo os caracteres como “ç” deveriam dar problema pois o codepoint deles são diverentes, mas nao eh isso q acontece tudo funciona … E ai ???
Daniel
Uma coisa é o code point e outra é a codificação do caracter em bytes. Por exemplo: Em ISO-8859-1 o ‘é’ é representado em 1 byte, enquanto que em UTF-8 é representado em 2 bytes. No entanto, independente do encoding utilizado, o code point do ‘é’ é 00E9. Felizmente, a maioria dos caracteres latinos é representável em ISO-8859-1, o que permite a conversão de um encoding para o outro nas aplicações Java sem problemas. O fato de essa conversão ser automática é a seguinte:
O Java sabe que os caracteres da parte JSF da aplicação estão em UTF-8, pois está declarado nos arquivos. Sendo assim, ele lê os caracteres em UTF-8, mas o que ele “guarda” mesmo é o code point. Na hora de levar a informação para o banco, ele sabe que a base está em ISO, pois está declarada como tal. Sendo assim, os caracteres vão ser passados para o banco representados como ISO e a devida representação em bytes é baseada no code point de cada caracter.
Agora, tente inserir o caracter do euro (’\u0080’) no seu banco. Com certeza vai dar problema, porque o símbolo do euro não é representável pelo encoding ISO.
Espero ter ajudado em algo, qualquer dúvida poste aqui e continuamos a discussão.
Abraços
vlw sua explicação ajudou bastante, mas meu problema está mesmo nos arquivos .properties, talvez vc possa me ajudar. O que acontece eh que eu defini meu arquivo como UTF-8 eu escrevo um caracter acentuado como por exemplo ‘ç’, ‘ã’, ‘á’ e quando ele recupera do arquivo properties e apresenta na página da erro. Está tudo como UTF-8 já nao sei mais o q fazer, no arquivo fica acentuado sem problemas o problema eh só na apresentação na página??? O arquivo deve apresentar o code point na pagina como por exemplo: “INVALID_DATE=Data inv\u00EF\u00BF\u00BDlida.” ou deve estar no normal como: “INVALID_DATE=Data inválida.”?
Deixa eu ver se entendi.
Você está SALVANDO seus arquivos como UTF-8 ou apenas colocando um CABEÇALHO como UTF-8?
Lembre-se que se você estiver colocando no cabeçalho que o arquivo é UTF-8 mas estiver salvando seus arquivos com outro encoding (WINDOWS-1252, ISO-8859-1…) não adianta muito, vc vai apenas enganar a sua aplicação.
Abraços
Nao o arquivo foi criado como utf-8, tenho certeza.
O arquivo deve apresentar o code point na pagina como por exemplo: “INVALID_DATE=Data inv\u00EF\u00BF\u00BDlida.” ou deve estar no normal como: “INVALID_DATE=Data inválida.”?
Eu colocaria “INVALID_DATE=Data inválida.” já que está tudo certo com o arquivo.
Ah, duas coisas mais. O cabeçalho dos arquivos jsf ou jsp estão como? E mais, o browser que você está usando está lendo com a codificação UTF-8?
pois eh desta forma nao funciona e da outra sim, o problema eh como converter o arquivo “INVALID_DATE=Data inválida.” para “INVALID_DATE=Data inválida.”? eu utilizo eclipse com wtp.
estou com o mesmo problema… Gostaria de saber como indico no JSF p utilizar UTF8 - ja que o banco esta UTF8 (seria melhor trocar)