Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Meu nome é Felipe, sou iniciante no mundo Linux e comecei a estudar Python 2.7.6 a pouco tempo quando me surgiu um problema:
Há cerca de uns 2 dias atrás, eu estava usando o ambiente interativo só para praticar mesmo, quando tentei executar este pequeno código:
>>> palavra = "página"
>>> palavra [ 1 ] == "á"
>>> False
>>> palavra = "página"
>>> print palavra
>>> página
>>> palavra = “página”
>>> palavra
>>> 'p\xc3\xa1gina'
Ate ai tudo bem, não me assustei, eu já havia ouvido falar que Python 2.7.6 tinha alguns detalhes relativos a codificação que poderiam causar este tipo de problema, na hora eu não me preocupei, deixei isso de lado por hora e fui terminar alguns outros testes que eu precisava fazer.
Porem, ontem quando tentei buscar soluções para esse problema, eu basicamente não consegui resolvê-lo, eu busquei em tudo quanto é lugar informações que pudesse me ajudar, mas nada adiantou.
O que eu encontrei principalmente dizia para alterar a codificação na qual o arquivo fonte seria salvo, introduzindo no código a codificação a ser usada:
#!/usr/bin/python
>>> palavra = "página"
>>> palavra
>>> 'p\xc3\xa1gina'
>>> palavra.encode("utf-8")
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
palavra.encode("utf-8")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
mas, quando tento codificar a variável sem que está contenha um caractere especial, pelo menos não é apresentado nenhum erro
>>> palavra = "Marcos"
>>> palavra
>>> 'Marcos'
>>> palavra.encode("utf-8")
>>>
Bom por hora é isso, se alguém souber o que pode estar acontecendo estou aguardando . . .
Observações:
Ubuntu 14.04 LTS - 32 bit - Python 2.7.6
IDLE - Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Obrigado pela Atenção ! ! !
Olá!
Oi, _Isis_ muito obrigado pela resposta, sobre o link que me passou, vou dar uma lida com mais calma, assim que puder . . . e sobre o exemplo do código, abaixo segue o que ocorreu aqui:
Antes de tudo peço desculpas pelo post gigantesco que vou postar, mas acho que pode ser útil.
Eu Testei o código no Ubuntu Instalado na Maquina e em algumas Live CD que possuo aqui na esperança de conseguir alguma luz, e eis o resultado:
No Ubuntu 14.04 LTS 32-bit – Único Sistema Instalado na maquina
Via Terminal e também através da IDLE do Python 2x:
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> palavra, palavra2 = 'página', u'página'
>>> type(palavra)
<type 'str'>
>>> type(palavra2)
<type 'unicode'>
>>> palavra[1] == 'á', palavra[1] == u'á'
Warning (from warnings module):
File "__main__", line 1
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
(False, False)
>>> palavra2[1] == 'á', palavra2[1] == u'á'
(False, False)
>>> palavra.decode('utf-8')[1] == 'á'
False
>>> palavra.decode('utf-8')[1] == u'á'
False
>>>
No Ubuntu 14.04 LTS – 32-bit – Live CD
Via Terminal:
ubuntu@ubuntu:~$ python -
Python 2.7.6 (default, Mar 22 2014, 22:59:38)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> palavra, palavra2 = 'página', u'página'
>>> type(palavra)
<type 'str'>
>>> type(palavra2)
<type 'unicode'>
>>> palavra[1] == 'á', palavra[1] == u'á'
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
(False, False)
>>> palavra2[1] == 'á', palavra2[1] == u'á'
(False, True)
>>> palavra.decode('utf-8')[1] == 'á'
False
>>> palavra.decode('utf-8')[1] == u'á'
True
>>>
No Ubuntu 14.10 - 32-bit – Live CD
Python via Terminal:
ubuntu-gnome@ubuntu-gnome:~$ Python
Python 2.7.8 (default, Oct 20 2014, 15:05:29)
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> palavra, palavra2 = 'página', u'página'
>>> type(palavra)
<type 'str'>
>>> type(palavra2)
<type 'unicode'>
>>> palavra[1] == 'á', palavra[1] == u'á'
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
(False, False)
>>> palavra2[1] == 'á', palavra2[1] == u'á'
(False, True)
>>> palavra.decode('utf-8')[1] == 'á'
False
>>> palavra.decode('utf-8')[1] == u'á'
True
>>>
No Debian 7.8 - Release (wheezy) 32-bit – Live CD
Kernel Linux 3.2.0-4-486
GNOME 3.4.2
Python via Terminal:
user@debian:~$ python
Python 2.7.3 (default, Mar 14 2014, 11:57:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> palavra, palavra2 = 'página', u'página'
>>> type(palavra)
<type 'str'>
>>> type(palavra2)
<type 'unicode'>
>>> palavra[1] == 'á', palavra[1] == u'á'
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
(False, False)
>>> palavra2[1] == 'á', palavra2[1] == u'á'
(False, True)
>>> palavra.decode('utf-8')[1] == 'á'
False
>>> palavra.decode('utf-8')[1] == u'á'
True
>>>
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
(False, False)
comum a todas as execuções do Python 2x não sei exatamente o que esta causando isso, mas pelo que vi,
o problema parece estar sendo causado, na execução desta parte:
palavra[1] == u'á'
>>> palavra.decode('utf-8')[1] == u'á'
False
em todas as outras execuções do Python 2x, a linha veio correta:
>>> palavra.decode('utf-8')[1] == u'á'
True
Pelo que parece o problema deve estar girando muito provavelmente em torno do Ubuntu 14.04 instalado aqui . . .
Observações.:
usada para representação de código em paginas web, como disse não sei se é pertinente ao problema, mas cada detalhe acho que já ajuda . . .
Bom por hora é só, vou continuar a pesquisar o que pode estar causando a anomalia aqui, e muito obrigado pelas dicas, tenho certeza que assim que conseguir resolver esses problemas aqui, elas serão de grande utilidade . . .
e desculpe pela tag " code " em branco não lembrei que o sistema do forum iria usa-la, falta de atenção da minha parte . . . :P
Obrigado pela Atenção ! ! !
palavra, palavra2 = 'página', u'página'
=> None
type(palavra)
=> <type 'str'>
type(palavra2)
=> <type 'unicode'>
palavra[1] == 'á', palavra[1] == u'á'
=> (False, False)
palavra2[1] == 'á', palavra2[1] == u'á'
=> (False, True)
palavra.decode('utf-8')[1] == 'á'
=> False
palavra.decode('utf-8')[1] == u'á'
=> True
Nas versões 2.x existe diferença entre strings criadas com "" e u"".
http://farmdev.com/talks/unicode/