Unicode karakterek megjelenítése Win10 promptban Pythonnal

Neki kellene állnom a Pythont oktató könyvem újraírásának, ...

Neki kellene állnom a Pythont oktató könyvem újraírásának, és ez alkalommal szeretnék a címben jelzett problémára valami jobb megoldást találni annál, mint ami az első kiadásban szerepel. Ott elintéztem azzal a dolgot, hogy a Python IDLE-ben futtatott szkriptek kimenete szépen megjeleníti az 'egzotikus' karaktereket is, mint például ezt itt: ♔. A cmd.exe és a PowerShell meg nem. A Linux terminál ablakaitól pedig idegen az ilyen deviáns viselkedés.

De azóta sok minden megváltozott: a Python 3.6-tól kezdve az értelmező a Windows konzolban is UTF-8-at használ; és megjelent a Win10  (vagy már akkoriban is megvolt?), én meg most szeretnék kicsit alaposabban utánanézni a megoldásnak.  Eltökéltem, hogy nem a Python interaktív módjában vagy az IDLE-ben fogom a példákat bemutatni, hanem az IPython-ban. De az IPython sem képes úrrá lenni a cmd.exe és a PS ezen hiányosságán még a Python 3.8-al megtámogatva sem.

Ami az idők során nem változott, az az, hogy nem értek a Windowshoz; ami  érthető, mert az elmúlt dekádban, összesen talán fél napnál is kevesebbet használtam. Tegnap azonban feltelepítettem egy Linuxban futó VirtualBoxba, és elkezdtem a tesztelést és a keresgélést a neten. A cél az volt, hogy egy a programozást éppen tanulni kezdő, nem informatikus olvasó számára a legkisebb erőfeszítést igénylő módot találjak a probléma megoldására.

A kutakodás során meglepődve olvastam, hogy a cmd.exe és a PS, akkor is meg tudná jeleníteni az 'egzotikus' karaktereket, ha nem váltanánk kódlapot ("To input/output Unicode in a console, one does not need to set the codepage"), azaz mindegy, hogy 852-es vagy 65001-es van-e beállítva, viszont a promptban futó alkalmazásnak a megfelelő API-t kell használnia. Ez új volt. Mivel a Python a 3.6-os verziótól kezdve már ennek figyelembevételével készült, így akkor csak a konzol nem megfelelő fontjai lehetnek a bűnösök.

Igen erről van szó. Csakhogy a konzol fontkészletének a bővítéséhez a registry-t kell manipulálni, és nem lehet ám akármilyen fontot hozzácsapni. Nos, ez nem egy olyan eljárás, amit az olvasóimnak javasolhatnék.

Ám úgy tűnik megtaláltam a megoldást a ConEmu  révén.  Anélkül, hogy el kellene magyaráznom, hogy ez az alkalmazás milyen sokoldalú, anélkül, hogy a zavarba ejtően sok beállítási lehetőséget kitárgyalnám, nagyjából négy-öt mondatban, maximum két screenshot-tal megtámogatva, le tudom majd írni miként kell a menüben egy bejegyzést készíteni, ami elindítja a PS-t, az meg  az IPython-t, és a ConEmu alájuk teszi a fontokat.

Egyelőre nem tudok jobb megoldást.

Valaki más?

Szerk:

Feltelepítettem a Win10-re az Ubuntu 18.04-et WSL-ként, majd "apt"-tal a Python3.8-at és 'pip'-pel az Ipython-t, de "Bástya elvtárs" csak soványka téglalapként mutatkozik. Bizonyára itt is  lehetne tovább küzdeni, de minek? Ez már túl megy azon a határon, amit "minimális erőfeszítésként" értelmezek.

Megoldva!

Köszönet @Sulc-nak, hogy felhívta a figyelmemet a Windows Terminalra. A Microsoft Store-ból telepítettem a preview-t, és ugyan még nem látok rajta semmilyen állítási lehetőséget (pl. font size stb.-t), de mire a könyvem elkészül addigra valószínűleg ez is beérik. Erre biztosíték szerintem az, hogy nyílt forrású, közösségi projektben fejlesztik.

Hozzászólások

A cmd.exe-nel a beallitasokban ugye nincs bekapcsolva a legacy uzemmod? Ugyan nincs keznel most Windows 10, de ott nekem ez a kapcsolo okozott mar unicode problemat is.

ha felteszed a jelenleg eléggé béta (Microsoft termék) windows terminal nevű cuccot, akkor tudni fogja minden további erőfeszítés nélkül.

ha van chocolatey-d:
choco install microsoft-windows-terminal

Egy JSON fájlban van a konfig, amit a tabok mellett lévő lefelé mutató nyilacskánál érsz el a Settings-ben, vagy a C:\Users\USER\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState könyvtárban (profiles.json). Nálam pl. így néz ki a Ubuntu szekció:

 

        {
            "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
            "hidden": false,
            "name": "Ubuntu-18.04",
			"colorScheme" : "Campbell",
			"fontFace" : "DejaVuSansMono NF",
			"fontSize" : 16,			
            "source": "Windows.Terminal.Wsl"
        }