Python – Resolver problema de acentuação

Bom, depois de um longo tempo sem postar, comentar, escrever nada sobre Python, vamos voltar a falar do dito cujo. Agora posso postar sobre o mesmo porque já adquiri uma boa bagagem do mesmo de vários scripts, programas criados e em produção.
Mas venho mostrar um problema que aleatóriamente me assombrou no começou e em boa parte dava para contornar mas quando “a água bateu na bunda” (meu pai diz isso), ae precisei resolver e não imaginava como era simples.
Você escreve uma aplicação que recebe dados de um usuario e grava em um banco de dados, no nosso caso nosso programa irá receber e imprimir na tela. Vamos la:
Beleza, você pode abrir um bloco de notas ou o IDLE(Python GUI) se for Windows e ir em File > New Window colocar o código acima e executar pressionado F5 ou Run > Run Module.

import sys

nome = raw_input("Digite seu nome: ")
email = raw_input("Digite seu e-mail: ")
cidade = raw_input("Digite sua cidade e estado (cidade/ESTADO): ")
telefone = raw_input("Informe seu telefone: ")
endereco = raw_input("Digite seu endereço: ")
bairro = raw_input("Digite seu bairro: ")
dist = raw_input("Digite o nome de sua Distribuição Linux favorita: ")

opcoes = [nome, email, cidade, telefone, endereco, bairro, dist]

for item in opcoes:
print "%s" % item


Como uso Linux e maior parte do tempo eu abro um editor via terminal o vim no caso é o que mais uso e inseir o código, beleza.
Ae é só abrir um terminal e digitar onde esta o arquivo salvo por exemplo codigo01.py:

root@linuxVM:/home/cleiton# python codigo01.py

Agora abaixo o erro reportado no Linux e em seguida no Windows.

erro_nolinux

erro_nowindows
Ambos Linux e Windows reportaram erros parecidos, mudando apenas o nome e o caracter reportado:

SyntaxError: Non-ASCII character ‘xc3′ in file codigo01.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Foi ae que acessando o link e dando uma olhada entendi o problema.

Caracteres como (ç, ã, á, õ, é, ê, …) é uma codificação diferente da padrão do Python no caso é ASCII, então você deve setar no cabeçalho do código fonte a codificação para os caracteres serem reconhecidos. O que usei e funcionou tanto no Windows quanto no Linux foi:

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

ou

# -*- coding: cp1252 -*-

Agora vamos ver o nosso código com a correção:

# -*- coding: utf-8 -*-
import sys

nome = raw_input("Digite seu nome: ")
email = raw_input("Digite seu e-mail: ")
cidade = raw_input("Digite sua cidade e estado (cidade/ESTADO): ")
telefone = raw_input("Informe seu telefone: ")
endereco = raw_input("Digite seu endereço: ")
bairro = raw_input("Digite seu bairro: ")
dist = raw_input("Digite o nome de sua Distribuição Linux favorita: ")

opcoes = [nome, email, cidade, telefone, endereco, bairro, dist]

for item in opcoes:
print "%s" % item

E agora vamos executar, pressionando F5 na IDLE Python no Windows, python codigo01.py no Linux ou indo até a pasta onde esta nosso código via MS-DOS e digitando como no Linux python codigo01.py, vamos ver o resultado, abaixo a primeira tela no Linux e a próxima no Windows:

linuxencodingok

windowsencodingok

O que me deixou mais cabreiro com isso, foi que no IDLE Python este erro não corre, mesmo sem a codificação, segue a imagem abaixo com e sem codificação o resultado é o mesmo:

IDLEPythonWindows

Porem ao inserir a codificação no cabeçalho tive bons resultado com cp1252, com utf-8 tive alguns erros em imprimir caracteres já no Linux ambas funcionaram perfeitamente.

Até a próxima!

Share Button

CC BY-NC-SA 4.0 Python – Resolver problema de acentuação by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.