[rails-br]Problemas com caracteres especiais e o banco de dados

941 views
Skip to first unread message

Daniel Shimoyama

unread,
Jan 27, 2010, 3:15:16 PM1/27/10
to rail...@googlegroups.com
Olá pessoal,

Seguinte está acontecendo o seguinte erro: 
PGError: ERRO:  sequência de bytes é inválida para codificação "UTF8": 0xe36f20

Isso acontece quando tento colocar "São Paulo" no banco, que alias é postgreSQL, ou seja, todo caracter"especial", é rejeitado.  
Já corria atras de muito tutorial na net, mas não acho solução.
Encoding na database.yml,etc, etc...
Alguém já enfrentou esse erro?

[]'s
Daniel

G. Sobrinho

unread,
Jan 28, 2010, 5:23:48 AM1/28/10
to rail...@googlegroups.com
Seu banco está em UTF8 e sua aplicação está tentando enviar em ISO (provavelmente).

A solução mais gambiarra é converter o banco para ISO. Posta seu database.yml no pastie.org para eu dar uma olhada.

Qual Rails e qual versão do adapter?

--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.



--
Cordialmente,

Gabriel Sobrinho
http://spartaonrails.com/

Joao Paulo Camargo

unread,
Jan 28, 2010, 5:38:54 AM1/28/10
to rail...@googlegroups.com
http://lmgtfy.com/?q=postgresql+pgerror+utf8



2010/1/27 Daniel Shimoyama <shimoyam...@gmail.com>
--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.



--
João Paulo Camargo | jpca...@gmail.com | http://jpcamargo.com


Shairon Toledo

unread,
Jan 28, 2010, 5:46:55 AM1/28/10
to rail...@googlegroups.com
Muda o text encoding do seu navegador para utf-8 posta algo se funcionar procure mudar o charset do seu http header content-type para text/html; charset=utf-8


2010/1/28 G. Sobrinho <gabriel....@gmail.com>

Daniel Shimoyama

unread,
Jan 28, 2010, 7:47:21 AM1/28/10
to rail...@googlegroups.com
http://pastie.org/798651

Olha a database.yml, então, acredito que não seja erro do banco, mas sim, do rails, pois eu faço insert na "mão" com os mesmos dados e vai que é uma beleza.

[]'s
Daniel

Wenderson Rodrigues Malheiros

unread,
Jan 28, 2010, 8:02:45 AM1/28/10
to rail...@googlegroups.com
no database.yml....

onde tiver:
encoding:utf-8

troque por
encoding:utf8

Não que seja esse o problema... mas no meu aqui está como essa opção que estou passando
----------------------------------------------------------------
Wenderson Rodrigues Malheiros
Linux evangelist
Ruby Enthusiast

Wenderson Rodrigues Malheiros

unread,
Jan 28, 2010, 8:03:29 AM1/28/10
to rail...@googlegroups.com
ahhh... essa opção do shairon aí tbm tem muita relevância

Daniel Shimoyama

unread,
Jan 28, 2010, 8:10:02 AM1/28/10
to rail...@googlegroups.com
Nenhuma das soluções deu certo. =(

Daniel Shimoyama

unread,
Jan 28, 2010, 9:28:48 AM1/28/10
to rail...@googlegroups.com
Encontrei uma solução,
 é uma gambiarra enorme, imagina colocar em todos os campos que podem receber esse tipo de caracter? Mas pelo menos resolve até eu conseguir encontrar outra forma.

Hugo

unread,
Jan 28, 2010, 10:53:58 AM1/28/10
to rail...@googlegroups.com
Bom dia,

O problema é que sua aplicação está enviando um texto em iso-8859-1
para o banco este espera receber um texto em utf-8.

E o codigo enviado (0xe36f20) é um utf-8 inválido.
o e3 correponde ao 'ã' ; 6f ao 'o' e 20 ao ' '.

Em utf-8 deveria ser (0xc3a36f20), onde
o c3a3 corresponde ao 'ã', 6f ao 'o' e 20 ao ' '.

Por sua aplicação está enviando em iso-5589-1 eu não sei.
Ou ela está recebendo desde modo do navegador, ou tem algum código
fazendo a conversão no meio do caminho.

Você já testou usando fazer entrada usando o script/console? Se
funcionar então deve ser o navegador que está mandando na codificação
errada. Se continuar dando erro deve ser a aplicação.


Conhecimento é controle!!!

--
Hugo A. G. V. Rosa
hugo...@gmail.com
hugo...@yahoo.com.br

Daniel Shimoyama

unread,
Jan 28, 2010, 11:28:17 AM1/28/10
to rail...@googlegroups.com
Já tentei usar o script/console, já rodei testes, mas nenhuma mudança em absoluto,
mas valeu a dica,
forcei em todos os aspectos o Rails e o Browser a entenderem tudo como utf-8

[]'s

Daniel

--

Hugo

unread,
Jan 28, 2010, 12:45:54 PM1/28/10
to rail...@googlegroups.com
Bom dia novamente,

Com relação a solução encontrada, você está convertendo os textos para
base64 (que usa apenas o começo da tabela ASCII) para armazenar no
banco.

Outro teste que você pode fazer é escrever uma página que imprima o
resultado deste código:
"São Paulo".each_byte { |a| print a.to_s(16)}

O resultado esperado se for utf-8 é: 53c3a36f205061756c6f
Se for ISO-8859-1 o resultado é: 53e36f205061756c6f

Com isso você pode ficar sabendo qual a codificação que está sendo usada.

Uma questão, quando você salva diretamente no banco usando o psql, ao
recuperar o dado através da aplicação ele é exibido corretamente? ou
sai algo como "São Paulo"

Daniel Shimoyama

unread,
Jan 28, 2010, 1:55:35 PM1/28/10
to rail...@googlegroups.com

Realmente a sua pergunta é plausível, e sim, o banco estava recebendo ISO-8859-1, ao invés de utf-8.
Eu ainda não sei o motivo do browser estar enviando em ISO-8859-1, mas dei uma olhada na API do rails, e encontrei uma forma de garantir o uso de utf-8.

em environment.rb:

config.action_controller.default_charset = "utf-8"

e adicionei a meta tag correta para utf-8

Com isso, consegui resolver o problema.

[]'s
Daniel

--

Hugo

unread,
Jan 28, 2010, 2:31:08 PM1/28/10
to rail...@googlegroups.com
Boa tarde,

Que bom... boa programação...

Conhecimento é controle!!!

2010/1/28 Daniel Shimoyama <shimoyam...@gmail.com>:

Nabucodonosor Coutinho

unread,
Jan 28, 2010, 4:50:09 PM1/28/10
to rail...@googlegroups.com
nao é o encoding do navegador, mas da aplicacao que se conecta com o
banco de dados

Em 28 de janeiro de 2010 07:46, Shairon Toledo
<shairon...@gmail.com> escreveu:

--
--
Nabucodonosor Coutinho

Nabucodonosor Coutinho

unread,
Jan 28, 2010, 4:58:02 PM1/28/10
to rail...@googlegroups.com
pode setar o encoding do banco no database.yml
de acordo com o encoding das views que nao precisam ser do mesmo
encoding do banco
o utf-8 é universal, qualquer outro encoding pode ser convertido para ele
e um banco em utf-8 pode armazenar caracteres de qualquer tipo de
encoding isso traz inumeras vantagens

vc pode ter banco em utf-8 e views em iso-8859-1 nao faz diferenca
o que acontece é que muita gente cria um arquivo por exemplo no gedit,
esse arquivo por padrão é salvo em utf-8, e a pessoal informa nos
headers da view que a saida é isso, o resultado disso com certeza será
um monte de caracteres estranhos

mas se o encoding no header informar o real encoding do arquivo, isso ta ok
em seguida o database.yml tem que informar o encoding que ta vindo das
views, assim o postgresql consegue converter normalmente

ex:
banco : utf-8

paginas: iso-8859-1
header da pagina: iso-8859-1

database.yml deve informar encoding iso-8859-1
porque é o encoding do que está vindo da view e que vai para o banco
chegando no postgresql ele vai saber converter para urf-8

--
--
Nabucodonosor Coutinho

Reply all
Reply to author
Forward
0 new messages