GNU/Linux >> Linux Esercitazione >  >> Linux

Come determinare la codifica dei caratteri utilizzata da un terminale in un programma C/c++?

Ho notato che SyncTERM utilizza una codifica dei caratteri diversa rispetto all'emulatore di terminale MacOS predefinito e sono incompatibili tra loro. Ad esempio, supponiamo di voler stampare un carattere di blocco in una stringa di formato. In SyncTERM, che utilizza la codifica dei caratteri ASCII estesa IBM, dovresti utilizzare una sequenza di escape ottale come 261 . In Terminal.app (e probabilmente anche in iTerm2), questo stampa solo un punto interrogativo. Poiché questi terminali utilizzano UTF-8, è necessario utilizzare uxxxx sequenza di escape.

Quindi supponiamo che tu voglia stampare un certo carattere, non ASCII, in una stringa di formato, e vuoi che funzioni in tutti gli emulatori di terminale, indipendentemente dal set di caratteri. Immagino che useresti una voce nel database terminfo, ma non ho molta familiarità con terminfo. Ho bisogno di alcune indicazioni qui.

Risposta accettata:

Corto:

  • terminfo non ti porterà lì, non ti aiuterà
  • non esiste un modo affidabile per determinare quale codifica utilizza effettivamente un terminale
  • Partire da valori letterali Unicode è la strada da percorrere, a condizione che tu sappia quale codifica voler utilizzare sul terminale
  • l'utente deve sapere quale locale è appropriato e quale codifica può fare il terminale
  • lo standard C ha funzioni per convertire caratteri "wide" che avrai a disposizione su qualsiasi piattaforma simile a Unix (vedi ad esempio setlocale , wcrtomb e wcsrtombs )

Linux
  1. Come trovare l'ID di processo (pid) di un programma terminale in esecuzione?

  2. Come avviare il terminale cPanel

  3. In che modo la mia applicazione C/C++ può determinare se l'utente root sta eseguendo il comando?

  4. Come trovare il percorso completo del programma C++ Linux dall'interno?

  5. Come ottenere il nome utente in C/C++ in Linux?

Come compilare C, C++ e Java utilizzando Terminal su Linux

Come personalizzare il terminale su Ubuntu 20.04

Come funziona il programma ping in Linux

Come copiare l'output del terminale?

Come determinare il numero della settimana del mese

Come devo determinare l'attuale utilizzo della rete?