Všiml jsem si, že SyncTERM používá jiné kódování znaků než výchozí emulátor terminálu MacOS a jsou navzájem nekompatibilní. Řekněme například, že chcete vytisknout blokový znak ve formátovacím řetězci. V SyncTERM, který používá kódování znaků IBM Extended ASCII, byste použili osmičkovou escape sekvenci jako 261
. V aplikaci Terminal.app (a pravděpodobně také iTerm2) to pouze vytiskne otazník. Protože tyto terminály používají UTF-8, musíte použít uxxxx
escape sekvence.
Řekněme tedy, že chcete vytisknout určitý znak, nikoli ASCII, ve formátovacím řetězci a chcete, aby fungoval ve všech emulátorech terminálu, bez ohledu na znakovou sadu. Hádám, že byste použili záznam v databázi terminfo, ale já opravdu nejsem obeznámen s terminfo. Potřebuji zde nějaké ukazatele.
Přijatá odpověď:
Krátce:
- terminfo vás tam nedovede, nepomůže
- neexistuje žádný spolehlivý způsob, jak určit, jaké kódování terminál skutečně používá
- Začít od literálů Unicode je správná cesta, za předpokladu, že víte, jaké kódování chcete na terminálu použít
- uživatel musí vědět, jaké národní prostředí je vhodné a jaké kódování terminál umí
- Standard C má funkce pro převod „širokých“ znaků, které budete mít k dispozici na jakékoli platformě podobné Unixu (viz například
setlocale
,wcrtomb
awcsrtombs
)