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

UTF-8 Windows Python

No meu arquivo .py estou adicionando a linha "# -- coding: UTF-8 --" para que possa ser reconhecida acentuação, mas mesmo assim não continua sem elas. Utilizo o editor Sublime, tentei salvar com encoding UTF-8, mas mesmo assim não surte efeito, também já utilizei outros tipos de terminais como o "cmder", mas mesmo assim continua sem as acentuação.

Alguém tem uma ideia por que isso acontece?

7 respostas

Tenta adicionar essa linhas Wagner:

# encoding: utf-8
# encoding: iso-8859-1
# encoding: win-1252

Me diz se deu certo por favor. O problema pode ter a ver com o S.O e o com o editor que você está usando pelo que eu pesquisei.

abraço

Agora aconteceu o seguinte, eu entro com qualquer caractere acentuado, para ser adicionado na lista e depois o imprimo os acentos aparecem, mas o que eu digitei no "print" dentro da aplicação retorna sem acentuação.

Utilizei o NotePad++, Sublime e Bloco de Notas. Não sei se deve existir alguma configuração dentro da próprio Python para isso uma lib ou um .ini.

Peguei algumas referências e fiz tudo que elas dizem, mas de nada adiantou:

https://github.com/quadrismegistus/python-dighum/wiki/Preparing-texts-for-Python

https://docs.python.org/3/library/codecs.html#module-encodings.utf_8_sig

https://docs.python.org/2/howto/unicode.html

Use o Sublime Wagner,

Sabe dizer qual é o enconding que ele (sublime) está usando ?

Sim já usei ele, com utf-8 e utf-8 with bom, nenhum resolveu.

Wagner, cole para mim o código que esta tendo problema de acentual, exatamente como esta no seu arquivo .py.

Aguardo seu código.

OBS: o problema de acentuação esta acontecendo quando você executa código pelo console do Python? Se for pelo console, vai dar problema mesmo. Mas se for através de um arquivo .py que você escreve seu código e roda depois é para funcionar.

Usando exemplo das aulas de Python, este é código:

# -*- coding: utf-8 -*-
#arquivo app.py
import re

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

def remover(nomes):
    print 'Qual nome você gostaria de remover?'
    nome = raw_input()
    nomes.remove(nome)

def alterar(nomes):
    print 'Qual nome você gostaria de alterar?'
    alterar_nome = raw_input()
    if (alterar_nome in nomes):
        posicao = nomes.index(alterar_nome)
        print 'Digite o novo nome'
        novo_nome = raw_input()
        nomes[posicao] = novo_nome
    else:
        print 'Nome não existe'

def procurar(nomes):
    print 'Digite o nome a procurar:'
    nome = raw_input()
    if(nome in nomes):
        print "Nome %s está cadastrado" % (nome)
    else:
        print "Nome %s não está cadastrado" % (nome)

def procurar_regex(nomes):
    print 'Digite a expressão regular'
    regex = raw_input()
    nomes_concatenados = ''.join(nomes)
    resultados = re.findall(regex, nomes_concatenados)
    print(resultados)

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

def menu():
    nomes = []
    escolha = ''
    while(escolha != '0'):    
        print 'Digite 1 para cadastrar, 2 para listar, 3 para remover, 4 para alterar, 5 procurar nome, 6 expressão regular, 0 para terminar'
        escolha = raw_input()
        if(escolha == '1'):
            cadastrar(nomes)
        if(escolha == '2'):
            listar(nomes)
        if(escolha == '3'):
            remover(nomes)
        if(escolha == '4'):
            alterar(nomes)
        if(escolha == '5'):
            procurar(nomes)
        if(escolha == '6'):
            procurar_regex(nomes)

menu()

No caso quando entro com o nome para cadastrar, se for um nome "João" e depois listar ele, este retorna normal no console escrito "João", mas o que está escrito dentro do arquivo .py, por exemplo:

def procurar(nomes):
    print 'Digite o nome a procurar:'
    nome = raw_input()
    if(nome in nomes):
        print "Nome %s está cadastrado" % (nome)
    else:
        print "Nome %s não está cadastrado" % (nome)

O que está dentro do print "está" ou "não" tem o retorno sem acentuação no console, do estilo "n'-|'o" para ser bem exato.

solução!

Fiz um teste criando o arquivo .py aqui com seu código em UTF-8 e executando através do terminal e funcionou. No meu caso, eu uso MAC.

Qual seu sistema, Windows? Se for, terá problemas, principalmente no prompt de comando com você pode ver nesse post

http://stackoverflow.com/questions/6344853/python-unicode-in-windows-terminal-encoding-used

Sendo assim, abra seu prompt e antes de executar seu programa execute esse comando:

CHCP 65001

Depois tente rodar sua aplicação. Apenas a partir do Python 3.X que a vida de usuários windows ficou mais fácil. Outra boa notícia é que se você mais tarde for criar aplicações web com Django,por exemplo, ele já se encarrega de resolver o problema do enconding, porque você não estará executando sua aplicação (a saída) no terminal.

Aguardo seu retorno.