GNU/Linux >> Znalost Linux >  >> Linux

Jak určit kódování znaků, které terminál používá v programu C/c++?

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 a wcsrtombs )

Linux
  1. Přizpůsobte si terminál na Ubuntu 20.04 – jak na to?

  2. Jak spustit terminál cPanel

  3. (C/C++) Jak vygenerovat spustitelný soubor, který lze spustit na Windows i Linuxu?

  1. Jak získat uživatelské jméno v C/C++ v Linuxu?

  2. Jak zkontrolovat HZ v terminálu?

  3. Jak zkopírovat výstup terminálu?

  1. Jak změnit barvu vašeho terminálu Linux

  2. Jak zjistit ID procesu (pid) běžícího terminálového programu?

  3. Jak určit počet týdnů v měsíci