GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man die Zeichencodierung bestimmen, die ein Terminal in einem C/c++-Programm verwendet?

Mir ist aufgefallen, dass SyncTERM eine andere Zeichenkodierung als der standardmäßige MacOS-Terminalemulator verwendet und sie nicht miteinander kompatibel sind. Angenommen, Sie möchten ein Blockzeichen in einer Formatzeichenfolge drucken. In SyncTERM, das die IBM Extended ASCII-Zeichenkodierung verwendet, würden Sie eine oktale Escape-Sequenz wie 261 verwenden . In Terminal.app (und wahrscheinlich auch iTerm2) druckt dies nur ein Fragezeichen. Da diese Terminals UTF-8 verwenden, müssen Sie den uxxxx verwenden Escape-Sequenz.

Nehmen wir also an, Sie möchten ein bestimmtes Nicht-ASCII-Zeichen in einer Formatzeichenfolge ausgeben, und Sie möchten, dass es in allen Terminalemulatoren unabhängig vom Zeichensatz funktioniert. Ich vermute, Sie würden einen Eintrag in der terminfo-Datenbank verwenden, aber ich bin mit terminfo nicht wirklich vertraut. Ich brauche hier ein paar Hinweise.

Akzeptierte Antwort:

Kurz:

  • termininfo bringt Sie nicht dorthin, hilft nicht
  • Es gibt keinen zuverlässigen Weg, um festzustellen, welche Codierung ein Terminal tatsächlich verwendet
  • mit Unicode-Literalen zu beginnen, ist der richtige Weg, vorausgesetzt, Sie wissen, welche Codierung Sie auf dem Terminal verwenden möchten
  • der Benutzer muss wissen, welches Gebietsschema angemessen ist und welche Codierung das Terminal ausführen kann
  • Der C-Standard hat Funktionen zum Konvertieren von „Wide“-Zeichen, die Sie auf jeder Unix-ähnlichen Plattform zur Verfügung haben werden (siehe zum Beispiel setlocale , wcrtomb und wcsrtombs )

Linux
  1. Passen Sie das Terminal unter Ubuntu 20.04 an - wie geht das?

  2. Wie finde ich die Prozess-ID (PID) eines laufenden Terminalprogramms?

  3. So starten Sie das cPanel-Terminal

  4. Wie kann meine C/C++-Anwendung feststellen, ob der Root-Benutzer den Befehl ausführt?

  5. Wie finde ich den vollständigen Pfad des C++-Linux-Programms von innen heraus?

So kompilieren Sie C, C++ und Java mit Terminal unter Linux

So passen Sie das Terminal unter Ubuntu 20.04 an

Funktionsweise des Ping-Programms unter Linux

Wie bestimmen Sie den tatsächlichen Befehl, der in Sie einfließt?

So bestimmen Sie die Nummer der Woche des Monats

Wie soll ich die aktuelle Netzwerkauslastung ermitteln?