Pessoal, a minha rotina usando “charAt” está me retornando os caracteres especiais do Brasil de forma errada, e tem me dado um certo trabalho ao gerar o SQL para o PostgreSQL.
Essa é a forma que ele sai:
“Fogão” = “Fog�o”
“Chá” = “Ch�”
“Tópico” = “T�pico”
…
…
.
No final das contas, me gera um erro: org.postgresql.util.PSQLException: ERROR: character 0xefbfbd of encoding “UTF8” has no equivalent in “LATIN1”
Alguém poderia me ajudar com esse problema?
Valeu pessoal!
(Como o caracter especial não é válido aqui, ele vai mostrar como “?”, mas ele sai aqui como uma carta de Ouros preto, com o ? no meio… - É complicado de mostrar, mas acho que todos já devem ter visto esse tipo de caractere especial)
Cara, eu acho que não tem jeito de resolver isso a não ser re-instalando o banco para ele utilizar a codificação ISO-8859-1. Um cara apareceu com um problema parecido e eu sugeri a seguinte solução, converter os strings da seguinte maneira:
String s = new String( stringDoBanco.getBytes("ISO-8859-1") , "ISO-8859-1")
Dá dando um problema de charset no seu banco…
Veja a configuração dele…
Eu nao sei precisamente onde é mas procura onde tem UFT-8 no seu banco e troca pra LATIN1… ou procura onde tem latin1 e troca pra utf-8
Então, mas o problema vem do Java mesmo, não do PostgreSQL…
No banco, até já possui caracteres especiais gravados na coluna, mas quando eu pego algum conteúdo de site com a linha:
bufferedReader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
Ele me retorna com essa codificação errada… E então, como eu manipulo o resultado, tentando separa o que desejo (estou elaborando uma espécie de WebCrawler), ele me gera esse erro no PG.
Pelo erro: character 0xefbfbd of encoding “UTF8” has no equivalent in “LATIN1” o meu banco já está como LATIN1, e eu estou tentando enviar um UTF8, não?
Eu acho que no postgres… tem duas configuracoes…
E deve estar dando conflito de uma com outra…
No seu caso… os dados estao como UTF-8… e a interface do banco esta LATIN1 (ou algo do tipo)…
Parece que tá dentro do banco… nem chegou a ir no java
Tenta isso:
new BufferedReader(new InputStreamReader(new URL(url).openStream(), "ISO-8859-1"));
ou
new BufferedReader(new InputStreamReader(new URL(url).openStream(), "UTF-8"));
Se tá falando LATIN1… está no banco ainda… pois no java nao existe esse charset… em java é ISO-8859-1
No máximo esse erro tá dando no driver… mas eu acho que é no banco mesmo
Se tá falando LATIN1… está no banco ainda… pois no java nao existe esse charset… em java é ISO-8859-1
No máximo esse erro tá dando no driver… mas eu acho que é no banco mesmo[/quote]
Sim, este erro é quando eu tento salvar a string que eu recuperei, no banco, e então ele me retorna essa linha… Mas fazendo o debug, eu já noto a existência desse caracter inválido desde as manipulações com o Java.
Inclusive eu imprimi no console (println) e ele me dá desde então o caractere errado (só que no console ele mostra o “quadrado” no lugar de “�”).
Vou testar essas suas dicas, e ver se dá certo, ok! (vou tentar agora mesmo)
rogelgarcia (e rmendes08), mais uma vez, muito obrigado pela dica, essa linha aqui resolveu o meu problema!
bufferedReader = new BufferedReader(new InputStreamReader(new URL(url).openStream(), "ISO-8859-1"));
Tudo blz agora!
Só aqui mesmo no GUJ para se ter ajuda altas horas da noite no domingão!
Obrigado a todos!