GNU/Linux >> Linux の 問題 >  >> Linux

端末がC/c ++プログラムで使用する文字エンコードを判別する方法は?

SyncTERMは、デフォルトのMacOSターミナルエミュレータとは異なる文字エンコードを使用しており、相互に互換性がないことに気づきました。たとえば、フォーマット文字列でブロック文字を印刷するとします。 IBM拡張ASCII文字エンコードを使用するSyncTERMでは、261のような8進エスケープシーケンスを使用します。 。 Terminal.app(そしておそらくiTerm2も)では、これは疑問符を出力するだけです。これらの端末はUTF-8を使用しているため、uxxxxを使用する必要があります エスケープシーケンス。

したがって、ASCIIではない特定の文字をフォーマット文字列で印刷し、文字セットに関係なく、すべてのターミナルエミュレータで機能させたいとします。 terminfoデータベースのエントリを使用すると思いますが、terminfoについてはあまり詳しくありません。ここにいくつかのポインタが必要です。

承認された回答:

短い:

  • terminfoはあなたをそこに連れて行かず、助けにはなりません
  • 端末が実際に使用しているエンコーディングを判断する信頼できる方法はありません
  • 端末で使用するエンコーディングがわかっている場合は、Unicodeリテラルから始めるのがよい方法です。
  • ユーザーは、どのロケールが適切で、端末がどのようなエンコーディングを実行できるかを知っている必要があります
  • C標準には、Unixライクなプラットフォームで使用できる「ワイド」文字を変換するための関数があります(たとえば、 setlocaleを参照)。 wcrtomb およびwcsrtombs

Linux
  1. Linux端末の色を変更する方法

  2. LinuxでターミナルからWebを検索する方法

  3. 実行中のターミナルプログラムのプロセスID(pid)を見つける方法は?

  1. cPanel ターミナルの起動方法

  2. (C/C++) Windows と Linux の両方で実行できる実行可能ファイルを生成する方法は?

  3. 別の C++ プログラム内で C++ プログラムを実行する方法は?

  1. Ubuntu 20.04でターミナルをカスタマイズする-それを行う方法は?

  2. Gnome (Ubuntu):ターミナルからコマンドラインを使用してプログラムウィンドウを前面に表示する方法は?

  3. パイピングされている実際のコマンドをどのように判断しますか?