charAt retornando caracteres especiais com erros. [Resolvido]

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!