2.7 KiB
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 371debug_response()
- Mehrere Emojisdebug_request()
- Mehrere Emojislog_startup_info()
- Startup-Emojissetup_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
- Immer safe_emoji() verwenden für neue Emoji-Verwendungen
- UTF-8 encoding bei allen neuen File-Handlern spezifizieren
- Try-Catch-Blöcke um Unicode-kritische Operationen
- EMOJI_FALLBACK erweitern für neue Emojis
Datum der Behebung
- Mai 2025 - 10:00 Uhr
Getestete Umgebung
- OS: Windows 10 (10.0.22621)
- Python: 3.13
- Shell: PowerShell
- Encoding: cp1252 → UTF-8