Dúvidas sobre upper(), lower() e decode() com caracteres acentuados

323 views
Skip to first unread message

Markos

unread,
Jan 4, 2013, 11:41:50 AM1/4/13
to python...@googlegroups.com
Pessoal,

Ao testar os métodos upper() e lower() de uma string observei que os
caracteres acentuados de uma string não são convertidos em maiúsculo com
o upper()

Exemplo:

txt = 'Python é ótimo!'

print txt
Python é ótimo!

print txt.upper()
PYTHON é óTIMO!

print txt.lower()
python é ótimo!

E se a string é toda em maiúscula o lower() também não funciona para os
acentuados.

txt = 'PYTHON É ÓTIMO'

print txt
PYTHON É ÓTIMO

print txt.lower()
python É Ótimo

Antes de fazer a pergunta procurei no Google e encontrei a alternativa
de criar uma outra string com a codificação Unicode usando o método
decode()

txt_u = txt.decode('utf_8')

print txt_u.upper()
PYTHON É ÓTIMO

print txt_u.lower()
python é ótimo

Então pensei em recriar a string mas com a codificação Unicode.

txt = u'Python é ótimo'

Mas nesse caso o print não funciona direito

print txt
Python é ótimo

E mesmo os métodos upper() e lower() não exibem os caracteres acentuados

print txt.lower()
python ã© ã³timo

print txt.upper()
PYTHON é óTIMO

O método type() mostra que tanto txt quanto txt_u são strings
codificadas em Unicode

type(txt)
<type 'unicode'>

type(txt_u)
<type 'unicode'>

Então por que o print tem saídas diferentes?

Alguém poderia me dar alguma dica?

Obrigado,
Markos


James McCormack

unread,
Jan 4, 2013, 11:54:22 AM1/4/13
to python...@googlegroups.com
Acredito que deve funcionar com utf-8.  Será que e do sistema, e não python?

2013/1/4 Markos <mar...@c2o.pro.br>


--
--
------------------------------------
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




Fábio Montefuscolo

unread,
Jan 4, 2013, 12:11:45 PM1/4/13
to python...@googlegroups.com
Não consegui simular o mesmo erro que o seu, mas veja o que fiz:

fabio@mouse:~$ export LC_ALL=en_US.latin1
fabio@mouse:~$ python
Python 2.7.3rc2 (default, Apr 22 2012, 22:30:17) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "isso não está em utf-8".decode('utf_8')
>>> print s
fisso n�o est� em utf-8
>>> 

Pode ser que a string que você digitou não esteja realmente com o charset que você imagina

2013/1/4 James McCormack <njmcc...@gmail.com>

Maxwell Morais

unread,
Jan 4, 2013, 12:38:55 PM1/4/13
to python...@googlegroups.com
Marcos, nosso grande mestre Luciano Ramalho respondeu está questão!

Markos

unread,
Jan 5, 2013, 12:29:59 PM1/5/13
to python...@googlegroups.com
Oi Amigos,

Obrigado pela atenção.

Eu fiz esses testes usando o ipython (ipython.org).

Então resolvi usar o interpretador python do sistema e não observei os
problemas com o print quando crio a string com a codificação Unicode:

txt = u'Python é ótimo'
>>> print txt
Python é ótimo
>>> print txt.upper()
PYTHON É ÓTIMO
>>> print txt.lower()
python é ótimo

Encontrei no ipython uma ferramenta muito prática pela comodidade de
completação de comandos com a tecla <TAB>.

Alguém sabe como eu configuro o ipython para ter esse tipo de problema
de codificação?

Obrigado,
Markos
Reply all
Reply to author
Forward
0 new messages