SyncTERMは、デフォルトのMacOSターミナルエミュレータとは異なる文字エンコードを使用しており、相互に互換性がないことに気づきました。たとえば、フォーマット文字列でブロック文字を印刷するとします。 IBM拡張ASCII文字エンコードを使用するSyncTERMでは、261
のような8進エスケープシーケンスを使用します。 。 Terminal.app(そしておそらくiTerm2も)では、これは疑問符を出力するだけです。これらの端末はUTF-8を使用しているため、uxxxx
を使用する必要があります エスケープシーケンス。
したがって、ASCIIではない特定の文字をフォーマット文字列で印刷し、文字セットに関係なく、すべてのターミナルエミュレータで機能させたいとします。 terminfoデータベースのエントリを使用すると思いますが、terminfoについてはあまり詳しくありません。ここにいくつかのポインタが必要です。
承認された回答:
短い:
- terminfoはあなたをそこに連れて行かず、助けにはなりません
- 端末が実際に使用しているエンコーディングを判断する信頼できる方法はありません
- 端末で使用するエンコーディングがわかっている場合は、Unicodeリテラルから始めるのがよい方法です。
- ユーザーは、どのロケールが適切で、端末がどのようなエンコーディングを実行できるかを知っている必要があります
- C標準には、Unixライクなプラットフォームで使用できる「ワイド」文字を変換するための関数があります(たとえば、
setlocale
を参照)。 、wcrtomb
およびwcsrtombs
)