Solucionado (ver solução)
Solucionado
(ver solução)
18
respostas

Aula 06 - Codificação UTF-8

Olá pessoal, tudo bem?

Mesmo incluindo a diretiva # -- coding: UTF-8 -- no meu programa continuo tendo problemas com acentos.

Estou utilizando o UltraEdit como editor e criando os arquivos .py com a codificação UTF-8. Alguém faz ideia do que seja?

Segue o código fonte


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

def cadastrar(nomes):
    print 'Digite: o nome:'
    nome = raw_input()
    nomes.append(nome)

def listar(nomes):
    print 'Listando dos nomes:'
    for nome in nomes:
      print nome

def remover(nomes):
    print 'Qual nome gostaria de remover?\n%s' %(nomes)
    nome = raw_input()
    nomes.remove(nome)

def menu():
    nomes = []
    escolha = ''
    while(escolha != '0'):
        print 'Digite 1 para cadastrar, 2 para listar, 3 remover, 0 para terminar'
        escolha = raw_input()

        if(escolha == '1'):
            cadastrar(nomes)

        if(escolha == '2'):
            listar(nomes)

        if(escolha == '3'):
            remover(nomes)

menu()

18 respostas

Marcelo, Boa Noite !

tente o seguinte código :

# coding: iso-8859-1 -*-

ou

# -*- coding: cp860 -*-

espero ter ajudado , Bons estudos

Olá Celso, tudo bem?

Obrigado pelo retorno, mais infelizmente não funcionou!

Ao fazer essa alteração o código não executa pois é gerado o seguinte erro:

File "app.py", line 1
SyntaxError: encoding problem: iso-8859-1 with BOM

ou

File "app.py", line 1
SyntaxError: encoding problem: cp860 with BOM

Marcelo, Bom dia !!

olha procurei em alguns forum na internet , e eles falaram que pode ser um destes códigos também :

# coding: cp1252 -*-

ou

# coding: cp850 -*-

Obrigado novamente pelo retorno, porém o erro ainda persiste.

Já tentei criar o script no bloco de notas, notepad++ e mesmo salvando o arquivo no formato UTF-8 continuo com o mesmo problema.

Será que não é o cmd do (Ru)windows que esteja interpretando em outra codificação?

Abraços,

Qual seu sistema operacional. Se você não gravou arquivo em utf de nada adiantará. Windows não segue esse padrão e zoa tudo. Tenha certeza absoluta de ter gravado seu arquivo em utf. Inclusive de estar usando a versão homologada de Python deste treinamento.

Se não for isso não faço idéia do que seja.

Sim, tenho certeza que gerei os arquivos com a codificação UTF-8. Estou utilizando a versão proposta pelo curso.

```` Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on wi n32 Type "help", "copyright", "credits" or "license" for more information.

```

Também estou suspeitando que seja problema no windows mesmo, mesmo assim muito obrigado pela ajuda.

Abraços

Bom, o problema de acentuação não vai te impedir de avançar. Mas eu quero ainda te perguntar mais uma coisa: experimenta baixar o NotePad++ e abrir seu arquivo nele. Há uma opção no menu que não estou conseguindo lembrar agora que mostrar a codificação na qual o arquivo foi salvo. É isso que eu queria que você visse, se realmente está em UTF-8. Se não estiver, você pode trocar pelo notepad++. Aliás, na plataforma Windows eu sugiro em ordem de importância: Sublime2, Nodepad++ e por último, mas não menos importante o ultra edit.

Só faz esse teste para mim, tudo bem? Ah, e não esqueça de quando terminar essa introdução a Python que temos dois treinamentos de Padrões de Projetos em Python, ainda mais avançados!!!!!!!!!!!!

Bom estudo e sucesso Marcelo!

Já tinha feito esse teste com o NotePad++, aliás ele estava salvando em UTF-8-BOM, que não faço ideia do que seja.

Baixei o Sublime2 e ele realmente é muito bom, estava acostumado com o UltraEdit pelas funcionalidades mas acho que o Sublime me atenderá mais com o Python.

Pode deixar que vou fazer todos os cursos sim, gostei muito da linguagem, apesar de achar algumas coisas estranhas...rsrs. Venho do mundo C# e Java.

Muito obrigado e vamos que vamos! :D

Sou programador Java há muito tempo, mas hoje programa mais com linguagens funcionais do que qualquer outra coisa. Python é uma linguagem multiparadigma, isto é, aceita programarmos funcionalmente, proceduralmente e orientado a objetos. Quando você terminar esse treinamento, o primeiro de padrões de Projetos vai mostrar ainda mais como tirar benefício do paradigma funcional e orientado a objetos, misturando muitas vezes os dois para dar uma solução elegante para determinado problema.

Estude bastante a parte de orientação à objetos da parte de Python, talvez sejando um Javaneiro, você estranhe o lance de classes abstratas e por ai vai que em Python é um diferente. Com certeza você vai estranhar o self no lugar de this e por ai vai.

Porém, Python está na moda agora quando falamos de Big Data, é uma área muito promissora para quem quer investir na linguagem.

Bom estudo e qualquer dúvida não deixe de postar aqui. No final, se se sentir ainda seguro, há também o treinamento de Django para desenvolvimento de aplicações web, mas eu sugiro você fazer primeiro o de design pattern 1 para aproveitar ainda melhor o de Django.

OBS: vi que fez o DP de C#, show. Quando fizer o de Python, verá que muito padrão de projeto deixa de existir, porque ele já resolve o problema nativamente! Vai gostar!

Muito obrigado mesmo!

Atualmente programo mais em C# que em Java e realmente estou achando muito estranho. Estou ansioso para ver esse curso de DP, pelo pouco que li sobre Python ele não tem os conceitos de abstrações(interface e classes abstratas) me corrija se estiver errado :)

O meu objetivo é esse mesmo, Big Data! Estou me especializando na área e por isso preciso urgentemente de Python para utilizar com Spark. Realmente essa é uma área muito promissora e empolgante.

Mais uma vez muito obrigado.

Um grande abraço

Beleza. Vamos deixar mais um dia sua pergunta aberta aqui para ver se alguém lança uma luz no problema do UTF no Windows. Se ninguém se manifestar... a gente pode fechar sexta-feira à noite essa issue?

Tem classe abstrata sim em Python.... e tem como você força um contrato... não é interface.. mas rola... hehee/

Bom estudo!

Combinado!

Entendei, logo vou entender esses detalhes do Python.

Obrigado!

Estou com o mesmo problema relatado nesse fórum. Já tentei o "save with encoding -> utf-8" do sublime, mas nada faz o acento sair direito.

Pois é João, qual sua plataforma? Windows? Se o arquivo está no formato UTF-8 e o cabeçalho no arquivo .py é em UTF-8 era para funcionar. Gravei vários arquivos aqui no Mac e no Linux e funcionou bem.

Pesquisando na internet, finalmente achei. É "culpa" do console do Windows. Segue o link:

http://pt.stackoverflow.com/questions/55431/problema-com-acentos-execu%C3%A7%C3%A3o-no-prompt-do-windows

Então, você estão fazendo certinho, mas o console do Windows mela o resultado, infelizmente pessoal. Parece não ter jeito ainda final ainda, mas neste post eles usam umas ganbiarras para resolver esse problema.

Infelizmente a plataforma Windows ainda é marginalizada por muitos projetos open source e bem que o Python poderia tentar fazer algum truque para ajudar usuários Windows. Olhe no link que passei, ele pede para fazer algo no console como chcp 850, 850 antes de rodar o arquivo .py.

Ainda há uma documentação da MS sobre este comando chcp:

http://www.infoisis.eti.br/mqisi/det/dos/pgdtdos002.htm

Foi mal pessoal, como não uso Windows não tenho um aqui perto para poder testar as soluções ai. Quem for testar, please, me dê um feedback, tá?

Oi Marcelo resolveu?

Sim, porém fiz diferente!

Como no meu caso o encoding default era 'ascii' tive que alterar para 'utf-8'

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

Para realizar essa alteração de forma permanente executei os seguintes passos:

1)Tive que descobrir onde estava o arquivo de configuração "site.py".

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for l in sys.path:
...     print l
...

C:\Windows\system32\python27.zip
C:\Python27\DLLs
====>C:\Python27\lib
C:\Python27\lib\plat-win
C:\Python27\lib\lib-tk
C:\Python27
C:\Python27\lib\site-packages

2) Ao localizar o arquivo "site.py", alterei o método "setencoding()" para "utf-8".

def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "utf-8" # Default value set by _PyUnicode_Init()
    if 0:
        # Enable to support locale aware default string encodings.
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]

Com essas simples alterações, consegui fazer com que os acentos passassem a funcionar. Porém ainda estou com problemas nas conversões implícitas de tuple, list e etc.

>>> lista_nomes = []
>>> lista_nomes.append('João')
>>> lista_nomes.append('José')
>>> lista_nomes.append('André')
>>> lista_nomes
['Jo\xc6o', 'Jos\x82', 'Andr\x82']
>>> lista_nomes[0]
'Jo\xc6o'
>>> print(lista_nomes[0])
João
>>>

Acredito que tenho que sobrescrever o método "__str__()", você sabe como poderia resolver esse problema?

Abraços,

solução!

Nota 10, mas cá entre nós: cruzes! Que dificuldade para resolver o problema de acentuação na plataforma Windows! Nem faço ideia de como seria a implementação de str (magic method) para resolver o problema de acentuação.

Minha sugestão é você ignorar isso e tocar os estudos. Quando você criar uma app web, o próprio framework resolver esse problema de enconding para você. Só mais uma dica: o terminal é tenso arrumar o enconding, mas no arquivo .py, se você usa o comentário e o arquivo está salvo em UTF-8 tinha que ter funcionado. Como não uso a plataforma Windows, a solução que encontrei foi a que passei na mensagem anterior. Não deixe de testa-la antes de fazer todo esse processo.

É realmente o windows é tenso... :)

Como isso não é impeditivo não vou focar no prosseguimento do curso. Caso descubra alguma coisa eu posto aqui.

Abraços,