GNU/Linux >> Tutoriels Linux >  >> Linux

Comment déterminer le codage de caractères utilisé par un terminal dans un programme C/c++ ?

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

Linux
  1. Comment trouver l'ID de processus (pid) d'un programme de terminal en cours d'exécution ?

  2. Comment mon application C/C++ peut-elle déterminer si l'utilisateur root exécute la commande ?

  3. Comment trouver le chemin complet du programme Linux C++ de l'intérieur ?

  4. Comment vérifier HZ dans le terminal?

  5. Gnome (Ubuntu) :comment amener une fenêtre de programme au premier plan en utilisant une ligne de commande depuis le terminal ?

Comment compiler C, C++ et Java à l'aide de Terminal sous Linux

Comment rechercher sur le Web à partir d'un terminal sous Linux

Comment personnaliser le terminal sur Ubuntu 20.04

Comment fonctionne le programme ping sous Linux

Comment copier la sortie du terminal ?

Comment dois-je déterminer l'utilisation actuelle du réseau ?