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
ewcsrtombs
)