C / C ++プログラムで端末が使用する文字エンコーディングをどのように決定しますか?

C / C ++プログラムで端末が使用する文字エンコーディングをどのように決定しますか?

SyncTERMはネイティブMacOS端末エミュレータとは異なる文字エンコーディングを使用し、互換性がないことがわかりました。たとえば、フォーマット文字列にブロック文字を印刷するとします。 IBM拡張ASCII文字エンコーディングを使用するSyncTERMは、8進エスケープシーケンスを使用します\261。たとえば、Terminal.app(およびおそらくiTerm2)は疑問符のみを印刷します。これらの端末はUTF-8を使用するため、\uxxxxエスケープシーケンスを使用する必要があります。

ASCII以外の特定の文字をフォーマット文字列として印刷し、文字セットに関係なくすべての端末エミュレータで動作したいとします。私はあなたがデータベースのterminfoエントリを使用すると思いますが、私はterminfoに精通していません。ここに指示が必要です。

ベストアンサー1

短い:

  • terminfoはあなたをそこに連れて行かず、役に立ちません。
  • 端末で使用される実際のエンコーディングを確認するための信頼できる方法はありません。
  • 端末で使用するエンコーディングを知っている場合は、Unicodeリテラルで始めることをお勧めします。
  • ユーザーは、どのロケールが適切か、端末がどのエンコードを実行できるかを知る必要があります。
  • C標準には、すべてのUnixファミリープラットフォームで利用可能な「ワイド」文字を変換する機能があります(たとえば、次を参照)。setlocalewcrtombそしてwcsrtombs)

おすすめ記事