Problema Acentuação

245 views
Skip to first unread message

vvsoftware

unread,
Aug 9, 2011, 2:57:31 PM8/9/11
to geraldo-pt
Senhores, detectei que na minha base de dados quando existem palavras
acentuadas ocorre um erro :

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in
position 8: ordinal not in range(128)

Li em alguns lugares que devemos informar este código :

# -*- coding: utf-8 -*-

Já coloquei este código em alguns arquivos tipo : base.py, pdf.py,
widgets.py e continua dando o mesmo erro, alguém poderia dar uma ajuda.

Milton Brandão

unread,
Aug 9, 2011, 3:59:29 PM8/9/11
to geral...@googlegroups.com
Coloque o código "# -*- coding: utf-8 -*-" na primeira linha do arquivo reports.py e views.py

--
Milton Neiva Brandão
Raminel Web - Sites, Sistemas Web, Consultoria, ERP, HelpDesk, Suporte Profissional
www.raminel.com.br
(62)3264-1487
con...@raminel.com.br
Twitter: @raminelweb        @miltinhobrandao

MSN: milt...@hotmail.com
GTalk: milt...@gmail.com

vvsoftware

unread,
Aug 9, 2011, 4:09:46 PM8/9/11
to geraldo-pt
Milton, já inclui no reports.py e também fiz no default.py, estou
utilizando web2py.

Milton Brandão

unread,
Aug 9, 2011, 4:22:13 PM8/9/11
to geral...@googlegroups.com
Não tenho familiaridade com Web2py.

John Evan Dizaro

unread,
Aug 9, 2011, 4:59:48 PM8/9/11
to geral...@googlegroups.com
Já tentou isto?
        for i in res:
   
            self.LstCadItem.append([
            unicode(i['x01_descricao_grupo'],'UTF−8'),
            unicode(i['x02_descricao_subgrupo'],'UTF−8'),
--
John Evan Dizaro

Valmadson Santos

unread,
Aug 16, 2011, 11:07:01 AM8/16/11
to geral...@googlegroups.com
John, sou iniciante no python como também no web2py, eu referencio os
campos nesta parte de código:

class band_detail(DetailBand):
height = 0.7*cm
elements = [
#Label(text='Name'),
ObjectValue(expression='id', left=1.5*cm),
ObjectValue(expression='descricao', left=5.5*cm),
]
borders = {'bottom': True}

por ingenuidade fiz assim :

ObjectValue(expression=unicode('descricao','UTF-8'), left=5.5*cm),

Deu o mesmo erro: UnicodeDecodeError: 'ascii' codec can't decode byte
0xc3 in position 2: ordinal not in range(128)


Em 09/08/11, John Evan Dizaro<johnd...@gmail.com> escreveu:


> Já tentou isto?
> for i in res:
>
> self.LstCadItem.append([

> unicode(i['x01_descricao_grupo'],'UTF-8'),
> unicode(i['x02_descricao_subgrupo'],'UTF-8'),

Marcos Thomaz

unread,
Aug 16, 2011, 11:13:51 AM8/16/11
to geral...@googlegroups.com
Tente assim:

               class band_detail(DetailBand):
                       height = 0.7*cm
                       elements = [
               #Label(text='Name'),
               ObjectValue(expression='id', left=1.5*cm),
               ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda instance: instance.descricao.encode('latin-1')),
           ]
       borders = {'bottom': True}
--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação

Valmadson Santos

unread,
Aug 16, 2011, 11:45:52 AM8/16/11
to geral...@googlegroups.com
Marcos, infelizmente deu o mesmo erro:

File "C:/web2py_source/applications/igreja/controllers/default.py",
line 226, in <lambda>


ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: instance.descricao.encode('latin-1')),

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position

13: ordinal not in range(128)


Em 16/08/11, Marcos Thomaz<marcos...@gmail.com> escreveu:

Marcos Thomaz

unread,
Aug 16, 2011, 12:51:55 PM8/16/11
to geral...@googlegroups.com
Qual a codificação do banco de dados?

Valmadson Santos

unread,
Aug 16, 2011, 2:02:13 PM8/16/11
to geral...@googlegroups.com
meu banco é postgres 1.8.4
codificação : UTF8

Marcos Thomaz

unread,
Aug 16, 2011, 2:15:55 PM8/16/11
to geral...@googlegroups.com
Então ao invés de encode('latin-1') use encode('utf-8')

Valmadson Santos

unread,
Aug 16, 2011, 2:26:13 PM8/16/11
to geral...@googlegroups.com
Será alguma configuração no meu micro? Não deu certo.

Será que essas classes abaixo precisam ter alguma configuração ? elas
são referenciadas na mensagem de erro.

restricted.py,
pdf.py,
base.py
widgets.py

Marcos Thomaz

unread,
Aug 16, 2011, 4:21:31 PM8/16/11
to geral...@googlegroups.com
Não precisa configurar nada não. Tente fazer o seguinte, remova os get_value que foi inserido. Depois, adicione na primeira linha de seu código fonte a linha:
# -*- coding: utf-8 -*-

E veja se o erro persiste.

vvsoftware

unread,
Aug 16, 2011, 10:36:22 PM8/16/11
to geraldo-pt
Todos arquivos já estão com esta codificação. Lembrando que estou
utilizando o framework web2py.

Marcos Thomaz

unread,
Aug 16, 2011, 11:11:09 PM8/16/11
to geral...@googlegroups.com
fera, tente assim então e me diga se o erro persiste:

ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda instance: u'%s'%instance.descricao ),


Em 16 de agosto de 2011 23:36, vvsoftware <valm...@gmail.com> escreveu:
Todos arquivos já estão com esta codificação. Lembrando que estou
utilizando o framework web2py.



Valmadson Santos

unread,
Aug 16, 2011, 11:26:05 PM8/16/11
to geral...@googlegroups.com
Agora foi essa mensagem :

ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: u'%s'%instance.descricao),

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position

0: ordinal not in range(128)

Em 17/08/11, Marcos Thomaz<marcos...@gmail.com> escreveu:

Valmadson Santos

unread,
Aug 17, 2011, 10:35:23 AM8/17/11
to geral...@googlegroups.com, Ovidio Marinho
Fiz essas três tentativas todas dão a mesma mensagem:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc1 in position

0: ordinal not in range(128)

ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: instance.descricao.decode('utf8').encode('cp1252')),


ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: u'%s'%instance.descricao),
ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda

instance: instance.descricao.encode('utf8')),

Marcos Thomaz

unread,
Aug 17, 2011, 1:01:13 PM8/17/11
to geral...@googlegroups.com
Tente usar apenar decode("utf-8")

Valmadson Santos

unread,
Aug 17, 2011, 9:25:38 PM8/17/11
to geral...@googlegroups.com
Senhores, tentei de diversas formas com encode('cp1252') e sem.

A mensagem nos dois casos é esta : AttributeError: 'Field' object has
no attribute 'decode'

Segue o código :


class band_detail(DetailBand):
height = 0.7*cm

texto = db.bairro.descricao.decode('utf8').encode('cp1252')
elements = [
ObjectValue(expression='id', left=1.5*cm),
ObjectValue(expression='texto', left=5.5*cm),
]
borders = {'bottom': True}


Em 17/08/11, Marcos Thomaz<marcos...@gmail.com> escreveu:

Frederico Vieira

unread,
Aug 17, 2011, 10:02:18 PM8/17/11
to geral...@googlegroups.com
Seu arquivo esta em utf-8?

Me refiro a codificação do arquivo mesmo e não ao cabeçalho do mesmo.
--
Att,

________________________
Frederico Vieira Lima
62 8432-2809

Valmadson Santos

unread,
Aug 17, 2011, 10:31:29 PM8/17/11
to geral...@googlegroups.com
Frederico, eu utilizo o gedit na edição dos meus arquivos .py,
procurei dentro do gedit onde eu poderia ter essa informação da
codificação do arquivo não encontrei. Mandei salvar como o arquivo e
escolhi o tipo : Unicode (UTF-8)

e novamente deu o mesmo erro:

texto = db.bairro.descricao.decode('utf8')


AttributeError: 'Field' object has no attribute 'decode'


Em 17/08/11, Frederico Vieira<frederic...@gmail.com> escreveu:

Valmadson Santos

unread,
Aug 17, 2011, 11:08:57 PM8/17/11
to geral...@googlegroups.com
Segue em anexo o arquivo com minhas actions, a def que estamos em
questão é a relatorio_bairro():
default.py

Marcos Thomaz

unread,
Aug 17, 2011, 11:34:08 PM8/17/11
to geral...@googlegroups.com
Valmadson, agora o erro mudou. Note que, descricao é um objeto do tipo Field. Teste o arquivo em anexo e diga a mensagem de erro:




Em 18 de agosto de 2011 00:08, Valmadson Santos <valm...@gmail.com> escreveu:
Segue em anexo o arquivo com minhas actions, a def que estamos em
questão é a relatorio_bairro():



default.py

Ovidio Marinho

unread,
Aug 18, 2011, 8:14:18 AM8/18/11
to geral...@googlegroups.com, web2py-us...@googlegroups.com, Valmadson Santos
Ola parceiro, eu disse que Geraldo eh bronqueiro, mas vamos la para novas alternativas.

Como esta se coportando no pdf esta parte title = 'Relação de Bairros'?, tem problemas ai tambem?
tem mais uns questions:

1- outra coisa que vi, pode testar o utf-8 dentro de aspas duplas, so para desencargo de c consciencia.

2- uma outra alternativa era criar seus relatorios fora do default.py criando um relatorio.py com o # -*- coding: utf-8 -*- no inicio do arquivo.

3- qual banco de dados esta usando?

4- como esta gravando la?


vamos avancando e nao se preocupe , a solucao vai chegar. o Marinho Brandao deve estar observando de longe a guerra da acentuacao , daqui a pouco ele entra e resolve.
      


       Ovidio Marinho Falcao Neto
             ovid...@gmail.com
                     88269088
                   Paraiba-Brasil



Em 18 de agosto de 2011 00:08, Valmadson Santos <valm...@gmail.com> escreveu:

vvsoftware

unread,
Aug 18, 2011, 3:12:57 PM8/18/11
to geraldo-pt
Senhores, segue o código das tentativas realizadas na geração do
relatório utilizando o web2py.

Observação : Quando tiramos os acentos da tabela, o relatório é gerado
sem problemas,
nas classes band_page_header e band_page_footer embora tenham palavras
acentuadas, não é gerado erro. Porém na classe band_detail , fazendo o
acesso a base de dados e caso exista acentos é mostrado o erro.

Abaixo todas as tentativas, caso alguém tenha uma alternativa, por
favor postar.

class band_detail(DetailBand):
height = 0.7*cm
#texto = db.bairro.descricao.decode('utf8')
#texto = 'missão'
#texto.decode('utf8')
elements = [
#Label(text='Name'),
ObjectValue(expression='id', left=1.5*cm),
ObjectValue(expression='descricao', left=5.5*cm ),
{este é o que funciona, caso não tenha acento, os demais mostram erro}
#ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: str(instance.bairro.descricao).decode('utf8') ),
#ObjectValue(expression='texto', left=5.5*cm),
#ObjectValue(expression='descricao',
left=5.5*cm, get_value=lambda instance:
instance.descricao.decode('utf8').encode('cp1252')),
#ObjectValue(expression='descricao',
left=5.5*cm, get_value=lambda instance: u'%s'%instance.descricao),
#ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: instance.descricao.encode('utf8')),
#ObjectValue(expression='descricao', left=5.5*cm, get_value=lambda
instance: instance.descricao.encode('latin-1')),
#ObjectValue(expression='descricao',
left=5.5*cm, get_value=lambda instance:
instance.descricao.encode('ISO-8859-1')),
]
borders = {'bottom': True}

Valmadson Santos

unread,
Aug 18, 2011, 4:08:22 PM8/18/11
to geraldo-pt
Consegui uma gambiara que talvez possa ajudar, só precisando criar uma
rotina que fizesse uma leitura
da tabela ou join e adicionasse a uma lista as descrições sem acento,
depois passando pra variável report.

class MyObject(object):
def __init__(self, **kwargs):
for k,v in kwargs.items():
setattr(self, k, v)

objects_list = [
MyObject(id=1, descricao='Centro'),
MyObject(id=2, descricao='Vila Uniao'),
]

report = MyReport(queryset=objects_list)

Funciona, só fica faltando essa rotina pra fazer a leitura.

Em 18/08/11, vvsoftware<valm...@gmail.com> escreveu:

Valmadson Santos

unread,
Aug 19, 2011, 12:04:44 AM8/19/11
to geraldo-pt
Bem turma, enquanto uma solução definitiva não chega até nós, essa
aqui é um paliativo que vai resolver de imediato. O que foi feito :

Foi criado uma rotina pra tirar o acento.

from unicodedata import normalize

def remover_acentos(txt, codif='utf-8'):
return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')

na def relatorio_bairro()
. . .
query = db(db.bairro.id>0).select(orderby=db.bairro.descricao)

registros = []
for tab in query:
registros.append({'id':tab.id,'descricao':remover_acentos(tab.descricao)})

report = MyReport(queryset=registros)

Bem melhor que o código anterior! rsrsrs.


Em 18/08/11, Valmadson Santos<valm...@gmail.com> escreveu:

Marcos Thomaz

unread,
Aug 19, 2011, 12:39:27 AM8/19/11
to geral...@googlegroups.com
Valmadson, se você puder (e quiser) faça o seguinte, me envie um script do banco (apenas da tabela que está com problema) e o código referente ao relatório, que tentarei simular a situação aqui e verificar o possível erro.

Valmadson Santos

unread,
Aug 19, 2011, 8:19:06 AM8/19/11
to geral...@googlegroups.com
Marcos, bom dia. Segue em anexo o controller default.py e o script de
criação da tabela bairro está descrito abaixo. A def em questão se
chama relatorio_bairro().

CREATE TABLE BAIRRO (
ID INTEGER NOT NULL DEFAULT nextval('bairro_id_seq'::regclass),
CONTROLE VARCHAR(20),
DESCRICAO VARCHAR(50),
CONSTRAINT PK_BAIRRO PRIMARY KEY (ID)
);

CREATE SEQUENCE bairro_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;

default.py

Valmadson Santos

unread,
Apr 25, 2012, 8:42:17 PM4/25/12
to Alex Benfica, web2py-us...@googlegroups.com, geral...@googlegroups.com
Alex poderia fazer uma tentativa ? Pelo browser vai na administração e procura o arquivo.py em questão e edita ele colocando a acentuação no próprio editor do web2py. Agora, acredito que são coisas que só o windows consegue fazer. 

O Max conseguiu resolver este problema, dá uma pesquisada na lista ele passou pelo mesmo problema.

Reply all
Reply to author
Forward
0 new messages