erro unicode

60 views
Skip to first unread message

Fernando Vieira

unread,
Jun 6, 2013, 10:47:53 AM6/6/13
to python...@googlegroups.com
Estou com um problema em um programa que faz a busca no banco de dados, porém quando trago um resultado com "Ç", me retorna o erro abaixo

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 15: invalid continuation byte

Em um outro programa eu consegui resolver importando sys, como abaixo, mais neste programa não funciona

reload(sys)
sys.setdefaultencoding("utf-8")



Gileno Alves

unread,
Jun 6, 2013, 2:42:04 PM6/6/13
to Python Brasil
Seu arquivo está escrito realmente em utf-8? O cabeçalho:

#encoding: utf-8

está no topo do seu arquivo? Isso caso esteja utilizando Python 2.x


2013/6/6 Fernando Vieira <fndi...@gmail.com>
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
Gileno Filho, Web Developer

Fernando Vieira

unread,
Jun 7, 2013, 7:34:23 AM6/7/13
to python...@googlegroups.com
Bom dia Gileno, o arquivo está com    # coding: utf-8    no cabeçalho

a versão do python é 2.6




Fernando Vieira

unread,
Jun 7, 2013, 8:03:19 AM6/7/13
to python...@googlegroups.com
Debugando o programa percebi que ele me traz a variável assim:  Esta\xe7\xe3o   que seria Estação

até consigo printar na tela   Esta��o, porém quando vou passar a variável para uma função específica o programa para, pois não deve conseguir ler a variável

Helton Alves

unread,
Jun 7, 2013, 8:14:18 AM6/7/13
to python...@googlegroups.com
Fernando posta o código no pastebin, ficaria muito melhor. :D


Em 7 de junho de 2013 09:03, Fernando Vieira <fndi...@gmail.com> escreveu:
Debugando o programa percebi que ele me traz a variável assim:  Esta\xe7\xe3o   que seria Estação

até consigo printar na tela   Esta��o, porém quando vou passar a variável para uma função específica o programa para, pois não deve conseguir ler a variável

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--

Helton Alves 
desenvolvedor web
formando sistemas de informação - FACIMP
cursando metodologia do ensino superior - INESPO

Fernando Vieira

unread,
Jun 7, 2013, 9:53:12 AM6/7/13
to python...@googlegroups.com
Segue o código, comentando onde ocorre o erro

Linux - Junior Polegato

unread,
Jun 7, 2013, 10:09:18 AM6/7/13
to python...@googlegroups.com
Em 07-06-2013 10:53, Fernando Vieira escreveu:
> Segue o código, comentando onde ocorre o erro
> http://pastebin.com/rZsQ140t

Olá!

Seu problema não é unicode, é que está lendo dados do BD em na
codificação "iso-8859-1", e imprimindo em UTF-8, provavelmente, veja:

»» print 'Correios - Esta\xe7\xe3o'
Correios - Esta��o
»» print 'Correios - Esta\xe7\xe3o'.decode('iso-8859-1')
Correios - Estação

Aí obviamente terá problema em envia essa string para frente se não
transforma em unicode.

Use então `emp=row[0].decode('iso-8859-1')´ ou defina sua codificação
para esta em vez de UTF-8, ou então converta seu BD em UTF-8.

[]'s
Junior Polegato

Fernando Vieira

unread,
Jun 7, 2013, 10:55:59 AM6/7/13
to python...@googlegroups.com
Junior, consegui fazer funcionar adicionando o decode justamente como vc falou >>> emp=row[0].decode('iso-8859-1')

Cara, mais vc poderia me explicar melhor pra eu entender esse lance do unicode e decode, ou me passar alguma documentação, pois estou tendo vários problemas com isto ultimamente.

obs: no começo do meu programa estava setado # coding: utf-8

Obrigado 


Linux - Junior Polegato

unread,
Jun 7, 2013, 11:03:07 AM6/7/13
to python...@googlegroups.com
Olá!

        De certa forma é simples... Se declarou que seu programa é em UTF-8, toda string dentro do programa deve estar em UTF-8 ou unicode declarada por `u'string'´. Se trabalhar com unicode, 99,99% das libs sabem lidar com ele, agora se não for unicode, essas libs vão esperar strings na codificação do seu ambiente, não necessariamente do seu script. Visto que seu ambiente está em UTF-8, você então deve de alguma forma saber a codificação dos arquivos ou banco de dados que lê e decodificar para unicode ou a codificação do seu ambiente.

        A função decode converte uma string na codificação especificada para unicode. Já a função encode vai converter a string na codificação especificada. Dessa forma procure sempre saber as codificações do seu ambiente e dos dados lidos ou escritos, seja de arquivos, sockets, bancos de dados, pipes, etc.

[]'s
        Junior Polegato

Gladson Simplício Brito

unread,
Jun 7, 2013, 11:13:21 AM6/7/13
to Python Brasil
Oi @Fernando tudo bom...
Tem um hangout sobre isso, otimamente abordado sobre unicode que foi apresentado pelo Álvaro Justen.
Eis o link:


Espero que ajude você a compreender...


d4n1

unread,
Jun 7, 2013, 1:13:47 PM6/7/13
to python...@googlegroups.com
Boa Gladson, vou até assistir esse hangout, é o que falta na minha lista :)
--
Daniel Melo <d4n1 :>

Fernando Vieira

unread,
Jun 7, 2013, 1:19:10 PM6/7/13
to python...@googlegroups.com
Obrigado pela explicação Junior
Gladson com certeza o vídeo vai ajudar bastante.

vlw pessoal
Reply all
Reply to author
Forward
0 new messages