[python-brasil] Novato em Python precisa de ajuda com acentuação

1,496 views
Skip to first unread message

Marcos Gramelich

unread,
Dec 16, 2007, 7:53:11 PM12/16/07
to python...@yahoogrupos.com.br
Olá pessoal, comecei a estudar Python esta semana, através da apostila do
Luciano Ramalho e, estou gostando muito, tanto da apostila quanto da
linguagem, porém, estou meio 'encalhado' aqui...

acabei de terminar a apostila, mas até agora não consegui trabalhar com
acentos... toda vez que eu tento colocar algum acento dá erro (seja no
shell, rodando via DOS ou via navegador)....

como que eu faço para trabalhar com acentos em Python?

Desculpe se já postaram uma resposta para este tipo de problema, eu procurei
um pouco pelas mensagens do grupo e no google mas só achei soluções que eu
não entendi muito bem... talvez por ainda não estar adaptado com a
linguagem.

Obrigado.


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Bruno Gomes

unread,
Dec 16, 2007, 11:25:40 PM12/16/07
to python...@yahoogrupos.com.br
Poderia mandar a saída do erro?

Em 16/12/07, Marcos Gramelich <dimens...@gmail.com> escreveu:


>
>
> Olá pessoal, comecei a estudar Python esta semana, através da apostila do
> Luciano Ramalho e, estou gostando muito, tanto da apostila quanto da
> linguagem, porém, estou meio 'encalhado' aqui...
>
> acabei de terminar a apostila, mas até agora não consegui trabalhar com
> acentos... toda vez que eu tento colocar algum acento dá erro (seja no
> shell, rodando via DOS ou via navegador)....
>
> como que eu faço para trabalhar com acentos em Python?
>
> Desculpe se já postaram uma resposta para este tipo de problema, eu procurei
> um pouco pelas mensagens do grupo e no google mas só achei soluções que eu
> não entendi muito bem... talvez por ainda não estar adaptado com a
> linguagem.
>
> Obrigado.
>

--
Bruno Gomes

Bruno Gomes

unread,
Dec 16, 2007, 11:24:45 PM12/16/07
to python...@yahoogrupos.com.br
--
Bruno Gomes

Luciano Ramalho

unread,
Dec 17, 2007, 5:13:21 AM12/17/07
to python...@yahoogrupos.com.br
> como que eu faço para trabalhar com acentos em Python?

Caro Marcos,

Conforme o Bruno Gola mencionou, seria legal você mandar a mensagem de
erro completa para a lista para podermos ajudar melhor. Mas já posso
adiantar algumas coisas.

1) No primeira ou segunda linha de cada arquivo .py que contém acentos
você deve colocar um comentário assim:

# coding: utf-8

Onde utf-8 é o nome da codificação usada pelo seu editor para salvar o
arquivo (verifique na janela de salvar como ou nas preferências do
editor). No Linux atualmente a codificação mais comum é utf-8. No
Windows em PT-BR use cp1252. Alguns bancos de dados usam iso8859-15.
Pesquise estas siglas na Wikipedia para saber de que se tratam, OK?

Se o seu editor não mostra claramente qual a codificação que está
usando, mude de editor. No Windows duas opções interessantes são o
notepad++ (não é o notepad lobotomizado da microsoft) e o KomodoEdit.

2) O modo mais seguro de trabalhar com acentos nas strings é
convertê-las sempre para strings unicode. Nas constantes, isso é feito
colocando-se o prefixo u, assim:

u'Esta é uma string unicode'

Ao ler strings do disco, ou de uma requisição Web, é preciso saber
qual a codificação em que as strings estão, para então convertê-las
para unicode corretamente. Dada uma string s, o jeito de converter
para unicode é:

su = s.decode('iso8859-15')

No exemplo acima, o resultado su é uma string unicode, e s é uma
string originalmente no formato iso8859-15. Se a string original s não
estiver no formato especificado, duas coisas podem ocorrer ao fazer o
decode: o Python levanta uma exeção ou então o resultado vem cheio de
sujeira.

A operação inversa, transformar Unicode em algum outro formato de
codificação, e feita pelo método encode:

sc = su.encode('utf-8')

Aqui, sc é uma string simples, codificada no padrão que o Windows usa
no Brasil, e su é uma string Unicode. Para enviar strings via HTTP
(numa resposta de CGI, por exemplo), use utf-8 que é o padrão
recomendado pelo W3C, órgão que define normas técnicas na Web.

Espero que com isso você consiga resolver os problemas com acentos. Se
não, mande para nós a mensagem de erro detalhada.

[ ]s
Luciano

Renato Cunha

unread,
Dec 17, 2007, 5:17:43 AM12/17/07
to python...@yahoogrupos.com.br
Oi Marcos,

Em Dom, 2007-12-16 às 22:53 -0200, Marcos Gramelich escreveu:
> acabei de terminar a apostila, mas até agora não consegui trabalhar com
> acentos... toda vez que eu tento colocar algum acento dá erro (seja no
> shell, rodando via DOS ou via navegador)....

O que acontece é que o python assume que sua codificação de caracteres
padrão é a latin1 (européia ocidental) e só aceita strings com esses
caracteres escapados.

Assim, a PEP0263 [1] definiu uma sintaxe para definição da codificação
dos seus scripts. Usando essa sintaxe, é possível trabalhar
perfeitamente com acentos.

Observe o seguinte exemplo:

Usando o arquivo teste.py:
#!/usr/bin/env python
print "Té+"

Quando o executamos, recebemos:

$ python teste.py
File "teste.py", line 3
SyntaxError: Non-ASCII character '\xe9' in file teste.py on line
3, but no encoding declared; see
http://www.python.org/peps/pep-0263.html for details

Lendo a PEP e mudando o script:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Té+"

Agora o executamos novamente:

$ python teste.py
Té+

[1] http://www.python.org/dev/peps/pep-0263/

[]'s,
--
Renato Cunha <ren...@gmail.com>
Blog: http://valedotrovao.com
Dropline Space: http://trovao.droplinegnome.org

Murilo de Souza Lopes

unread,
Dec 16, 2007, 11:33:32 PM12/16/07
to python...@yahoogrupos.com.br
http://www.reportlab.com/i18n/python_unicode_tutorial.html


Em 17/12/07, Bruno Gomes <brunoper...@gmail.com> escreveu:


>
> Poderia mandar a saída do erro?
>

> Em 16/12/07, Marcos Gramelich <dimens...@gmail.com<dimensionzero%40gmail.com>>


> escreveu:
> >
> >
> > Olá pessoal, comecei a estudar Python esta semana, através da apostila
> do
> > Luciano Ramalho e, estou gostando muito, tanto da apostila quanto da
> > linguagem, porém, estou meio 'encalhado' aqui...
> >
> > acabei de terminar a apostila, mas até agora não consegui trabalhar com
> > acentos... toda vez que eu tento colocar algum acento dá erro (seja no
> > shell, rodando via DOS ou via navegador)....
> >
> > como que eu faço para trabalhar com acentos em Python?
> >
> > Desculpe se já postaram uma resposta para este tipo de problema, eu
> procurei
> > um pouco pelas mensagens do grupo e no google mas só achei soluções que
> eu
> > não entendi muito bem... talvez por ainda não estar adaptado com a
> > linguagem.
> >
> > Obrigado.
> >
>
> --
> Bruno Gomes
>
>

--
Murilo de Souza Lopes
Soluções para a WEB
http://www.desweb.com.br
Telefones para contato:
55 011 4656-2596


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.

Marcos Gramelich

unread,
Dec 17, 2007, 7:42:23 AM12/17/07
to python...@yahoogrupos.com.br
Atualizando a situação...

Ae pessoal... acho que 'entendi' ... ehehhe... mudei lá no .py que eu rodava
pelo DOS .. e depois que eu coloquei o 'u' antes da string ele pegou o 'çã'
normal..

e no CGI depois que eu mudei o encode do arquivo para 'UTF-8', coloquei a
'#encoding: UTF-8' e mudei o encode no Internet Explorer para 'utf-8
unicode' pegou normal os acentos na palavra "Calendário"..

então.. acho que "aprendi" como fazer...

achava que era só no ColdFusion que os acentos me perseguiam...

mto obrigado pessoal

Em 17/12/07, Marcos Gramelich <dimens...@gmail.com> escreveu:
>
> Este foi um teste no DOS.
> C:\Python25\PROJETOS\Livro01>lunar.py File
> "C:\Python25\PROJETOS\Livro01\lunar.py", line 50 SyntaxError: Non-ASCII
> character '\xe3' in file C:\Python25\PROJETOS\Livro01\lunar.py on line 50,


> but no encoding declared; see http://www.python.org/peps/pep-0
> 263.html for details
>
>

> Este foi um erro no navegador, testando um CGI
> C:\Python25\PROJETOS\Livro01> lunar.py File
> "C:\Python25\PROJETOS\Livro01\lunar.py", line 50 SyntaxError: Non-ASCII
> character '\xe3' in file C:\Python25\PROJETOS\Livro01\lunar.py on line 50,


> but no encoding declared; see http://www.python.org/peps/pep-0263.html for
> details
>

> Coloquei os arquivos em anexo (deixei os acentos nos arquivos para que o
> erro seja provocado.. e no 'calendario.py' eu comentei o try/except e
> re-indentei para rodar mostrando o erro.


>
> Em 17/12/07, Bruno Gomes <brunoper...@gmail.com> escreveu:
> >

> > Poderia mandar a saída do erro?
> >

> > Em 16/12/07, Marcos Gramelich <dimens...@gmail.com<dimensionzero%40gmail.com>>


> > escreveu:
> >
> > >
> > >
> > > Olá pessoal, comecei a estudar Python esta semana, através da apostila
> > do
> > > Luciano Ramalho e, estou gostando muito, tanto da apostila quanto da
> > > linguagem, porém, estou meio 'encalhado' aqui...
> > >
> > > acabei de terminar a apostila, mas até agora não consegui trabalhar
> > com
> > > acentos... toda vez que eu tento colocar algum acento dá erro (seja no
> > > shell, rodando via DOS ou via navegador)....
> > >
> > > como que eu faço para trabalhar com acentos em Python?
> > >
> > > Desculpe se já postaram uma resposta para este tipo de problema, eu
> > procurei
> > > um pouco pelas mensagens do grupo e no google mas só achei soluções
> > que eu
> > > não entendi muito bem... talvez por ainda não estar adaptado com a
> > > linguagem.
> > >
> > > Obrigado.
> > >
> >
> > --
> > Bruno Gomes
> >
> >
> >
>
>
>

> --
> //Marcos Gramelich
> "A espada deve ser mais do que uma simples arma... ela deve ser a resposta
> para todas as perguntas da vida." - Miyamoto Musashi
>

--
//Marcos Gramelich
"A espada deve ser mais do que uma simples arma... ela deve ser a resposta
para todas as perguntas da vida." - Miyamoto Musashi


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.

Marcos Gramelich

unread,
Dec 17, 2007, 7:13:30 AM12/17/07
to python...@yahoogrupos.com.br
Este foi um teste no DOS.
C:\Python25\PROJETOS\Livro01>lunar.py File
"C:\Python25\PROJETOS\Livro01\lunar.py", line 50 SyntaxError: Non-ASCII
character '\xe3' in file C:\Python25\PROJETOS\Livro01\lunar.py on line 50,
but no encoding declared; see http://www.python.org/peps/pep-0
263.html for details


Este foi um erro no navegador, testando um CGI
C:\Python25\PROJETOS\Livro01>lunar.py File
"C:\Python25\PROJETOS\Livro01\lunar.py", line 50 SyntaxError: Non-ASCII
character '\xe3' in file C:\Python25\PROJETOS\Livro01\lunar.py on line 50,
but no encoding declared; see http://www.python.org/peps/pep-0263.html for
details

Coloquei os arquivos em anexo (deixei os acentos nos arquivos para que o
erro seja provocado.. e no 'calendario.py' eu comentei o try/except e
re-indentei para rodar mostrando o erro.

Em 17/12/07, Bruno Gomes <brunoper...@gmail.com> escreveu:
>

> Poderia mandar a saída do erro?
>

> Em 16/12/07, Marcos Gramelich <dimens...@gmail.com<dimensionzero%40gmail.com>>


> escreveu:
>
> >
> >
> > Olá pessoal, comecei a estudar Python esta semana, através da apostila
> do
> > Luciano Ramalho e, estou gostando muito, tanto da apostila quanto da
> > linguagem, porém, estou meio 'encalhado' aqui...
> >
> > acabei de terminar a apostila, mas até agora não consegui trabalhar com
> > acentos... toda vez que eu tento colocar algum acento dá erro (seja no
> > shell, rodando via DOS ou via navegador)....
> >
> > como que eu faço para trabalhar com acentos em Python?
> >
> > Desculpe se já postaram uma resposta para este tipo de problema, eu
> procurei
> > um pouco pelas mensagens do grupo e no google mas só achei soluções que
> eu
> > não entendi muito bem... talvez por ainda não estar adaptado com a
> > linguagem.
> >
> > Obrigado.
> >
>
> --
> Bruno Gomes
>
>
>

--

//Marcos Gramelich
"A espada deve ser mais do que uma simples arma... ela deve ser a resposta
para todas as perguntas da vida." - Miyamoto Musashi

----------

#jogo da alunissagem
#lunar.py

#importar funcao sqrt do modulo math
from math import sqrt

x = 500. #altitude em pes.
v = -50. #velocidade em pes/s.
g = -5. #aceleracao gravitacional em pes/s/s.
t = 1. #tempo entre jogadas (em segundos).
comb = 120. #quantidade de combustivel.

print 'Simulacao de Alunissagem'
print '-' * 30
print 'Digite a quantidade de combustivel a queimar: '

fmt = 'Alt: %6.2f | Vel: %6.2f | Comb: %3d'

while x > 0: #enquanto nao tocarmos o solo.
msg = fmt % (x, v, comb) #montar mensagem.
if comb > 0: #ainda temos combustivel?
#obter quantidade de combustivel a queimar.
resp = raw_input(msg + ' Queima = ')
try: #converter resposta em numero.
queima = float(resp)
except: #resposta nao era numero.
queima = 0
if queima > comb: #queimou mais do que tinha?
queima = comb #entao queima o que tem.
comb = comb - queima #subtrai o queimado.
a = g + queima #aceleracao = gravidade + queima.
else: #sem combustivel.
print msg #mostra msg sem perguntar.
a = g #aceleracao = gravidade.
x0 = x #armazena posicao inicial.
v0 = v #armazena velocidade inicial.

x = x0 + v0*t + a*t*t/2 #calcula a nova posicao.
v = v0 + a*t #calcula nova velocidade.

#se o loop acabou, tocamos o solo (x <= 0).
vf = sqrt(v0*v0 + 2*-a*x0) #calcular velocidade final

print '>>>> Contato! Velocidade final: %6.2f' % (-vf)

#avaliar pouso de acordo com a velocidade
if vf == 0:
msg = 'Alunissagem perfeita!'
elif vf <= 2:
msg = 'Alunissagem dentro do padrao!'
elif vf <= 10:
msg = 'Alunissagem com avarias leves!'
elif vf <= 20:
msg = 'Alunissagem com avarias graves!'
else:
msg = 'Modulo lunar destruido!'
print
print '>>>>' + msg
----------

#!/python25/python
#calendario melhorado

print 'Content-type: text/html\n'
print

#try:
from time import time, localtime
from calendar import monthcalendar
from string import join

ano, mes, hoje = localtime(time())[:3]

print '<html><title>Calendario Dinamico</title>'
print '<body>'
print '<center>'
print '<h1>Calendário de %02d/%04d</h1>' % (mes,ano)
print '<table>'
print '<tr>'
for dia_sem in ['Seg','Ter','Qua','Qui','Sex','Sab','Dom']:
if dia_sem in ['Sab','Dom']: bgcolor='green'
else: bgcolor='CCCCCC'
print '<th width="45" bgcolor="%s">' % bgcolor
print '<h3>%s</h3></th>' % dia_sem
print '</tr>'
for semana in monthcalendar(ano,mes):
print '<tr>'
num_dia_sem = 0
for dia in semana:
if dia == hoje:
bgcolor = 'pink'
elif num_dia_sem == 0 or num_dia_sem == 6:
bgcolor = 'lightgreen'
else:
bgcolor = 'lightblue'
print '<td align="right" bgcolor="%s">' % bgcolor
if dia != 0:
print '<center><h2>%2d</h2></center>' % dia
print '</td>'
num_dia_sem = num_dia_sem + 1
print '</tr>'
print '</table></center>'
#except:
# import sys
# from traceback import print_exc
# sys.stderr = sys.stdout
# print '<hr><h3>Erro no CGI</h3><pre>'
# print_exc()
# print '</pre>'

print '</body></html>'


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.

Wilsimar

unread,
Dec 17, 2007, 10:59:26 AM12/17/07
to python...@yahoogrupos.com.br
> # coding: utf-8

>
> No Windows em PT-BR use cp1252. Alguns bancos de dados usam iso8859-15.

> u'Esta é uma string unicode'


> su = s.decode('iso8859-15')

> sc = su.encode('utf-8')

--------------------------------------------

Luciano... eu tentei todos esses metodos e nenhum resolveu no meu caso.
tenho um arquivo criado no notepad++ com a seguinte instrução...

print 'cotação'

ele imprime -> cota&#9500;º&#9500;úo
se usar utf-8 e outras variaçoes se usar cp1252 ou iso8859-15 mas naum
a acentuação correta.

naum importa o q eu faça.. jah tentei mudar o formato no notepad++ de
ANSI para utf-8 e outros.

se eu colocar print u'cotaçao' dah o seguinte erro...

codecs.charmap_encode(input, errors, encoding_map)
charmap codec can't encode character u'\xe3' in position 5:
character maps to <undefined>

no console interativo funciona mas não consigo digitar o til ~

Joao S. O. Bueno

unread,
Dec 17, 2007, 9:41:05 PM12/17/07
to python...@yahoogrupos.com.br
On Monday 17 December 2007 09:42, Marcos Gramelich wrote:
> Atualizando a situação...
>
> Ae pessoal... acho que 'entendi' ... ehehhe... mudei lá no .py que
> eu rodava pelo DOS .. e depois que eu coloquei o 'u' antes da
> string ele pegou o 'çã' normal..
>
> e no CGI depois que eu mudei o encode do arquivo para 'UTF-8',
> coloquei a '#encoding: UTF-8' e mudei o encode no Internet Explorer
> para 'utf-8 unicode' pegou normal os acentos na palavra
> "Calendário"..
>
> então.. acho que "aprendi" como fazer...
>
> achava que era só no ColdFusion que os acentos me perseguiam...

Não -- graças a nossa herança de um iniciod a informática sem acentos,
achoq ue acentuação vai ser um problema pro resto da vida pra todo
mundo.


Mas...não estou respondendo seu e-mail só para isso, e sim para dizer
o que voce faz no CGI (e, em breve, em outras soluções python + web
que você adotar) para não precisar modificar manualmente a
codificação do seu navegador:
Quando você imprime o cabeçalho Content-Type, você adiciona também a
jnformação de codificação.

Assim, ao invés de:
"Content-Type: text/html" ,
voce envia:
"Content-Type: text/html; charset=utf-8"

(ref.: http://www.w3.org/International/O-HTTP-charset )

E por fim, uma nota offtopic, mas os moderadoresvão me perdoar por
essa: você já cehgou no python! Parabéns. Agora faz um favor para
todo mundo e encosta esse I.E. ai... pode ser? Se for para continuar
no windows, tem o Firefox - um navegador mais completo e menos
bugado, e que tenta seguir as especificações dos padrões WEB, em vez
de se esforçar em distorce-las.


Abraços,

js
-><-

>
> mto obrigado pessoal

Marcos Gramelich

unread,
Dec 18, 2007, 8:15:54 AM12/18/07
to python...@yahoogrupos.com.br
lol.. obrigado pelo conselho sobre o Firefox... mas eu já o adotei como
navegador desde a v. 1.0

abraços

Em 17/12/07, Joao S. O. Bueno <gwi...@mpc.com.br> escreveu:

--

//Marcos Gramelich
"A espada deve ser mais do que uma simples arma... ela deve ser a resposta
para todas as perguntas da vida." - Miyamoto Musashi


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.

Reply all
Reply to author
Forward
0 new messages