Formulário de contato

Nome

E-mail *

Mensagem *

Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Imagem

Encodings UTF-8, CP-1252 e CP-850: Por que seu Python mostra caracteres estranhos?

Encodings UTF-8, CP-1252 e CP-850: Por que seu Python mostra caracteres estranhos?

Publicado por em


@CanalQb no YouTube


@CanalQb

Encodings UTF-8, CP-1252 e CP-850: Por que seu Python mostra caracteres estranhos?



O Problema que Todo Programador Já Viu

Você acabou de executar seu script Python e se depara com isso no terminal:

â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€
â"Œâ"€â"€â"€â"€â"€â"€â"€â"¬â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€
â"‚ CATEGORIA â"‚ NAVEGADORES    â"‚
â•â€Ã¢â€¢Ââ•Ââ•Ââ•“
Não foi possível conectar

Isso acontece por incompatibilidade de ENCODING!

Neste tutorial completo, você vai entender de uma vez por todas o que são encodings, por que causam problemas e como resolver definitivamente essa dor de cabeça.


O que é Encoding (Codificação)?

Encoding é a forma como o computador traduz caracteres em números binários. Pense nisso como um dicionário: cada letra, símbolo ou emoji tem um número correspondente.

O problema acontece quando seu código usa um dicionário diferente do que o terminal espera. É como tentar ler um livro em português usando um dicionário de inglês!

Como o Erro Acontece na Prática:

  1. Você escreve o código com acentos e símbolos especiais
  2. O arquivo .py é salvo em UTF-8 (padrão do Python 3)
  3. Python lê o arquivo corretamente em UTF-8
  4. Python tenta imprimir no terminal Windows
  5. O terminal está configurado em CP-850 (padrão antigo)
  6. Resultado: CARACTERES QUEBRADOS! 💥

Os 3 Principais Encodings que Você Precisa Conhecer

1️⃣ UTF-8 (Unicode Transformation Format - 8 bits)

O padrão mundial moderno. É como um dicionário universal que contém TODOS os idiomas do planeta!

✅ Suporta:

  • Todos os idiomas (português, árabe, chinês, russo)
  • Símbolos especiais e matemáticos
  • Emojis 🔥 🎯 ⚠️
  • Caracteres de desenho de tabelas ┌─┬─┐

📍 Onde é usado:

  • Arquivos .py (padrão Python 3)
  • Sites e APIs modernas
  • Bancos de dados (MySQL, PostgreSQL)
  • Terminal Linux e Mac
Português: ç ã é ô á í ú
Símbolos: ✓ ✗ ★ ♥ → ← ↑ ↓
Tabelas: ┌─┬─┐ │ ├─┼─┤ └─┴─┘
Emojis: 🔥 🎯 ⚠️ 💡 🚀

2️⃣ CP-1252 (Code Page 1252 - Windows Latin-1)

Padrão antigo do Windows. Como um dicionário que só tem idiomas europeus ocidentais.

⚠️ Suporta apenas:

  • Português, espanhol, francês, alemão
  • Símbolos básicos (+ - * /)
  • Acentos latinos (ç ã é ô)

❌ NÃO suporta:

  • Caracteres de desenho Unicode ┌─┬─┐
  • Emojis 🔥 (aparecem como ?)
  • Idiomas asiáticos, árabes

📍 Onde é usado:

  • Aplicativos Windows antigos
  • Excel versões antigas
  • PowerShell (algumas versões)

3️⃣ CP-850 (Code Page 850 - DOS Latin-1)

Padrão ANTIGO do MS-DOS (anos 80/90). Ainda é o padrão do CMD no Windows!

⚠️ Suporta apenas:

  • Português, espanhol (acentos básicos)
  • Caracteres de desenho antigos ╔═╗ ║ ╚═╝
  • Símbolos matemáticos básicos

❌ NÃO suporta:

  • Caracteres Unicode modernos ┌─┬─┐
  • Emojis 🔥
  • Símbolos especiais ✓ ✗

📍 Onde é usado:

  • CMD do Windows (cmd.exe)
  • Terminal Windows por padrão
  • É AQUI QUE O PROBLEMA ACONTECE!

Tabela Comparativa: Onde Cada Encoding é Usado

Local / Sistema Encoding Padrão Por quê?
Arquivos .py UTF-8 Padrão Python 3
Terminal Linux UTF-8 Sistema moderno
Terminal Mac UTF-8 Sistema moderno
CMD Windows CP-850 Legado do MS-DOS 😱
PowerShell Windows CP-1252 ou UTF-16 Depende da versão
Sites / APIs UTF-8 Padrão web moderno
Banco de Dados UTF-8 MySQL, PostgreSQL
Excel Antigo CP-1252 Compatibilidade Windows

Soluções Práticas: Como Resolver de Uma Vez!

✅ Solução 1: Forçar UTF-8 no Terminal Windows (RECOMENDADO)

Esta é a solução DEFINITIVA! Adicione este código NO INÍCIO do seu script Python:

Python
#!/usr/bin/env python3
-- coding: utf-8 --
import os
import sys
# ============================================
# FIX CRÍTICO: Força UTF-8 no Windows
# ============================================
if os.name == 'nt':  # Apenas no Windows
# Muda codepage do terminal para UTF-8
os.system('chcp 65001 > nul')
# Reconfigura stdout e stderr para UTF-8
if hasattr(sys.stdout, 'reconfigure'):
    sys.stdout.reconfigure(encoding='utf-8')
if hasattr(sys.stderr, 'reconfigure'):
    sys.stderr.reconfigure(encoding='utf-8')
# Agora pode usar caracteres UTF-8 livremente!
print("┌─────────────────────┐")
print("│ Funcionou! ✓        │")
print("│ Português: ç ã é ô  │")
print("│ Símbolos: ★ ♥ ✓ ✗   │")
print("└─────────────────────┘")

🔍 O que cada linha faz:

  • os.name == 'nt' - Detecta se está no Windows
  • chcp 65001 - Muda o terminal para UTF-8 (code page 65001)
  • sys.stdout.reconfigure - Força Python a enviar UTF-8 para o terminal

✅ Solução 2: Substituir Unicode por ASCII (Compatibilidade Total)

Se você NÃO quer forçar UTF-8 (para máxima compatibilidade), use apenas caracteres ASCII:

# ❌ ANTES (Unicode - pode dar erro):
print("┌────────┬────────┐")
print("│ Nome   │ Valor  │")
print("└────────┴────────┘")
print("✓ Sucesso!")
# ✅ DEPOIS (ASCII - funciona sempre):
print("+--------+--------+")
print("| Nome   | Valor  |")
print("+--------+--------+")
print("[OK] Sucesso!")

📋 Tabela de Substituição Unicode → ASCII:

Unicode ASCII Uso
┌ ─ ┬ ┐ + - + + Borda superior tabela
| Borda vertical
├ ─ ┼ ┤ + - + + Borda meio tabela
└ ─ ┴ ┘ + - + + Borda inferior tabela
✓ ✗ [OK] [X] Status
★ ♥ * <3 Símbolos

✅ Solução 3: Configurar seu Editor de Código

Garanta que seus arquivos .py sejam sempre salvos em UTF-8:

📝 Visual Studio Code:

  1. Clique no encoding no canto inferior direito (ex: "UTF-8")
  2. Selecione "Save with Encoding"
  3. Escolha UTF-8

📝 Notepad++:

  1. Menu "Encoding"
  2. Selecione "UTF-8 (sem BOM)"

📝 PyCharm:

  1. File → Settings → Editor → File Encodings
  2. Defina UTF-8 para todos os campos

Exemplo Real: Antes e Depois da Correção

❌ Código ANTES (com problema):

print("\t┌───────────────────┬─────────────────────┐")
print("\t│ CATEGORIA         │ NAVEGADORES         │")
print("\t└───────────────────┴─────────────────────┘")
print("\t✓ Instalado: 3")
print("\t✗ Não instalado: 5")

Resultado no Windows CMD:

â"Œâ"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"¬â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€
â"‚ CATEGORIA         â"‚ NAVEGADORES         â"‚
âÅ"“ Instalado: 3
Não instalado: 5

✅ Código DEPOIS (Solução 1 - UTF-8):

import os, sys
# FIX CRÍTICO: Força UTF-8 no Windows
if os.name == 'nt':
os.system('chcp 65001 > nul')
sys.stdout.reconfigure(encoding='utf-8')
print("\t┌───────────────────┬─────────────────────┐")
print("\t│ CATEGORIA         │ NAVEGADORES         │")
print("\t└───────────────────┴─────────────────────┘")
print("\t✓ Instalado: 3")
print("\t✗ Não instalado: 5")

Resultado no Windows CMD:

┌───────────────────┬─────────────────────┐
│ CATEGORIA         │ NAVEGADORES         │
└───────────────────┴─────────────────────┘
✓ Instalado: 3
✗ Não instalado: 5

✅ Código DEPOIS (Solução 2 - ASCII):

print("\t+-------------------+---------------------+")
print("\t| CATEGORIA         | NAVEGADORES         |")
print("\t+-------------------+---------------------+")
print("\t[OK] Instalado: 3")
print("\t[!] Nao instalado: 5")

Resultado em QUALQUER terminal:

+-------------------+---------------------+
| CATEGORIA         | NAVEGADORES         |
+-------------------+---------------------+
[OK] Instalado: 3
[!] Nao instalado: 5

Quando Usar Cada Solução?

Cenário Solução Recomendada
Script só para você (Windows) Forçar UTF-8 ✓
Script distribuído (multiplataforma) ASCII puro ✓
Aplicação moderna (web/API) UTF-8 sempre ✓
Legado/compatibilidade Windows CP-1252 ou ASCII
Terminal não controlado ASCII puro ✓

Código Completo Pronto para Usar

Este é um exemplo completo com tratamento de encoding que funciona em TODOS os sistemas:

engajamento.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script exemplo com tratamento correto de encoding
Funciona em Windows, Linux e Mac
"""
import os
import sys
# ========================================================
# FIX ENCODING - SEMPRE NO INÍCIO
# ========================================================
if os.name == 'nt':  # Windows
os.system('chcp 65001 > nul')
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
if hasattr(sys.stderr, 'reconfigure'):
sys.stderr.reconfigure(encoding='utf-8')
# ========================================================
# AGORA PODE USAR UTF-8 LIVREMENTE
# ========================================================
def exibir_tabela():
"""Exibe tabela com caracteres Unicode"""
print("\n┌─────────────────────┬──────────────────┐")
print("│ CATEGORIA           │ STATUS           │")
print("├─────────────────────┼──────────────────┤")
print("│ Navegadores         │ ✓ 3 instalados   │")
print("│ Proxies             │ ✓ 15 ativos      │")
print("│ Vídeos              │ ✓ 42 encontrados │")
print("└─────────────────────┴──────────────────┘")
print("\n✓ Sistema funcionando corretamente!")
print("⚠️  Atenção: Mantenha proxies ativos")
print("🔥 Engajamento em andamento...\n")
if name == "main":
print("Encoding atual:", sys.stdout.encoding)
exibir_tabela()

Checklist: Antes de Distribuir seu Script

Antes de compartilhar seu código, verifique:


📝 Resumo Final

🎯 UTF-8 é o futuro e o presente - use sempre que possível
⚠️ Windows CMD é o vilão - ainda usa CP-850 por padrão
Solução definitiva: Force UTF-8 no início do script Python
💡 Alternativa segura: Use apenas ASCII para compatibilidade total
🔧 Ferramentas: Configure seu editor para UTF-8 sempre


🎓 Quer Aprender Mais?

📚 Documentação Python

Guia completo sobre Unicode no Python

Acessar →

📖 Wikipedia UTF-8

História e funcionamento do UTF-8

Acessar →

💻 Code Pages Windows

Lista completa de encodings Windows

Acessar →

💬 Ficou com dúvidas? Deixe nos comentários!
Gostou do tutorial? Compartilhe com outros programadores!


Tags: Python, Encoding, UTF-8, Windows, Terminal, Unicode, CP-1252, CP-850, Programação, Tutorial, Caracteres Especiais, Erro de Encoding

Marcadores:

© CanalQB – Tutoriais de YouTube, Python, Airdrops e Criptomoedas

Comentários