Projektarbeit-MYP/backend/docs/UNICODE_ENCODING_FIX.md
2025-05-31 22:40:29 +02:00

2.7 KiB

Unicode-Encoding-Fehler Behebung

Problem-Beschreibung

Fehlermeldung:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 47-48: character maps to <undefined>

Ursache: Die Anwendung verwendete Unicode-Emojis (⏱️, 🔧, etc.) in Log-Nachrichten, die unter Windows mit der cp1252-Codierung nicht dargestellt werden können.

Implementierte Lösung

1. Verbesserte safe_emoji Funktion

  • Datei: utils/logging_config.py
  • Änderung: Robuste Prüfung auf cp1252-Kompatibilität unter Windows
  • Fallback: ASCII-Ersatzzeichen für alle Emojis

2. Alle direkten Emoji-Verwendungen ersetzt

Betroffene Funktionen:

  • measure_execution_time() - Zeile 371
  • debug_response() - Mehrere Emojis
  • debug_request() - Mehrere Emojis
  • log_startup_info() - Startup-Emojis
  • setup_logging() - Debug-Emoji

Lösung: Alle direkten Emoji-Strings durch safe_emoji() Aufrufe ersetzt.

3. ColoredFormatter Exception-Handling

  • Try-Catch-Block um format()-Methode
  • Fallback: ASCII-Ersatzzeichen bei Unicode-Fehlern
  • Erhaltung: Originale Logging-Funktionalität

4. UTF-8 Encoding für File-Handler

  • Alle RotatingFileHandler mit encoding='utf-8' Parameter
  • Console-Handler UTF-8 Rekonfiguration für Windows PowerShell
  • Windows-spezifische Console-Output-Page auf UTF-8 (CP 65001)

5. Erweiterte EMOJI_FALLBACK-Tabelle

EMOJI_FALLBACK = {
    '⏱️': '[SCHED]',
    '🔧': '[PRINT]',
    '🐞': '[BUG]',
    '🚀': '[START]',
    '📂': '[FOLDER]',
    # ... weitere Fallbacks
}

Windows-spezifische Verbesserungen

Console-Konfiguration

# VT100-Unterstützung aktivieren
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)

# UTF-8 Console Output
kernel32.SetConsoleOutputCP(65001)

# Locale-Fallbacks
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')

PowerShell Stream-Rekonfiguration

if hasattr(console_handler.stream, 'reconfigure'):
    console_handler.stream.reconfigure(encoding='utf-8')

Resultat

  • Keine Unicode-Encoding-Fehler mehr
  • Robuste Emoji-Darstellung mit Fallbacks
  • UTF-8-Unterstützung für alle Log-Ausgaben
  • Windows PowerShell Kompatibilität
  • Erhaltung der ursprünglichen Logging-Funktionalität

Präventive Maßnahmen

  1. Immer safe_emoji() verwenden für neue Emoji-Verwendungen
  2. UTF-8 encoding bei allen neuen File-Handlern spezifizieren
  3. Try-Catch-Blöcke um Unicode-kritische Operationen
  4. EMOJI_FALLBACK erweitern für neue Emojis

Datum der Behebung

  1. Mai 2025 - 10:00 Uhr

Getestete Umgebung

  • OS: Windows 10 (10.0.22621)
  • Python: 3.13
  • Shell: PowerShell
  • Encoding: cp1252 → UTF-8