fix: forcage UTF-8 + ask() resistant aux erreurs d'encodage (anti-crash SSH)
This commit is contained in:
@@ -44,6 +44,15 @@ import requests
|
||||
import yaml
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# ── Forçage UTF-8 des entrées/sorties ────────────────────────────────────────
|
||||
# Évite les UnicodeDecodeError sur les accents en session SSH dont la locale
|
||||
# n'est pas en UTF-8. Indépendant de LANG/LC_ALL du système.
|
||||
for _stream in (sys.stdin, sys.stdout, sys.stderr):
|
||||
try:
|
||||
_stream.reconfigure(encoding="utf-8", errors="replace")
|
||||
except (AttributeError, ValueError):
|
||||
pass # flux non reconfigurable (rare) — on continue
|
||||
|
||||
load_dotenv()
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
@@ -115,6 +124,11 @@ def ask(prompt: str) -> str:
|
||||
except (EOFError, KeyboardInterrupt):
|
||||
print("\n Session interrompue.")
|
||||
sys.exit(0)
|
||||
except UnicodeDecodeError:
|
||||
# Faute d'encodage (locale SSH non-UTF-8) : on ne tue pas la session.
|
||||
warn("Caractère mal encodé ignoré. Relance ta saisie "
|
||||
"(ou préfixe la commande par PYTHONUTF8=1 au prochain lancement).")
|
||||
return ""
|
||||
|
||||
|
||||
def ask_multiline(end_marker: str = ".") -> str:
|
||||
@@ -128,6 +142,9 @@ def ask_multiline(end_marker: str = ".") -> str:
|
||||
line = input()
|
||||
except (EOFError, KeyboardInterrupt):
|
||||
break
|
||||
except UnicodeDecodeError:
|
||||
warn("Ligne mal encodée ignorée.")
|
||||
continue
|
||||
if line.strip() == end_marker:
|
||||
break
|
||||
lines.append(line)
|
||||
|
||||
Reference in New Issue
Block a user