J'ai remarqué que SyncTERM utilise un codage de caractères différent de celui de l'émulateur de terminal MacOS par défaut, et ils sont incompatibles les uns avec les autres. Par exemple, supposons que vous souhaitiez imprimer un caractère de bloc dans une chaîne de format. Dans SyncTERM, qui utilise le codage de caractères IBM Extended ASCII, vous utiliseriez une séquence d'échappement octale comme 261
. Dans Terminal.app (et probablement iTerm2 également), cela imprime simplement un point d'interrogation. Étant donné que ces terminaux utilisent UTF-8, vous devez utiliser le uxxxx
séquence d'échappement.
Supposons donc que vous souhaitiez imprimer un certain caractère non ASCII dans une chaîne de format et que vous souhaitiez qu'il fonctionne dans tous les émulateurs de terminaux, quel que soit le jeu de caractères. Je suppose que vous utiliseriez une entrée dans la base de données terminfo, mais je ne suis pas vraiment familier avec terminfo. J'ai besoin de conseils ici.
Réponse acceptée :
Court :
- terminfo ne vous y conduira pas, ne vous aidera pas
- il n'existe aucun moyen fiable de déterminer quel encodage un terminal utilise réellement
- partir des littéraux Unicode est la voie à suivre, à condition que vous sachiez quel encodage vouloir utiliser sur le terminal
- l'utilisateur doit savoir quel paramètre régional est approprié et quel encodage le terminal peut faire
- le standard C a des fonctions pour convertir les caractères "larges" qui seront disponibles sur n'importe quelle plate-forme de type Unix (voir par exemple
setlocale
,wcrtomb
etwcsrtombs
)