binárka / linux (pull_request) Successful in 10s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 0s
testy / pytest (3.13) (pull_request) Successful in 0s
testy / pytest (3.14) (pull_request) Successful in 1s
Windowsová binárka spadla dřív, než stihla vypsat adresu:
print("Počitadlo je dostupné na:")
UnicodeEncodeError: 'charmap' codec can't encode character 'č'
Windows sahá po historické kódové stránce všude, kde výstup není konzole —
přesměrovaný do souboru, puštěný ze skriptu, ve frontě CI. První háček nad
takovým proudem shodí celý program.
Oba vstupní body si teď výstup přepnou na UTF-8. Na konzoli i na ostatních
systémech je to prázdná operace, protože tam je UTF-8 dávno výchozí.
Pojistka errors="replace" je pro zbytek případů: rozsypaný háček je pořád
lepší než spadlý server.
Chytila to zkouška po stavbě, ne uživatel. Test to reprodukuje přes
TextIOWrapper s cp1252, takže se to bez opravy neprojde ani na Linuxu.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
21 lines
856 B
Python
21 lines
856 B
Python
"""Aby čeština prošla i tam, kde konzole čeká něco jiného."""
|
|
|
|
import sys
|
|
|
|
|
|
def utf8() -> None:
|
|
"""Přepne standardní výstup na UTF-8.
|
|
|
|
Windows sahá po historické kódové stránce (cp1252, cp852) všude, kde
|
|
výstup není konzole — přesměrovaný do souboru, puštěný ze skriptu, ve
|
|
frontě CI. První háček nad takovým proudem shodí celý program, takže
|
|
binárka umřela dřív, než stihla vypsat adresu, na které poslouchá.
|
|
|
|
Na konzoli i na ostatních systémech je UTF-8 dávno výchozí a tohle je
|
|
tam prázdná operace. `errors="replace"` je pojistka pro zbylé případy:
|
|
rozsypaný háček je pořád lepší než spadlý server.
|
|
"""
|
|
for stream in (sys.stdout, sys.stderr):
|
|
if hasattr(stream, "reconfigure"):
|
|
stream.reconfigure(encoding="utf-8", errors="replace")
|