端末を損傷せずにバイナリデータをそのまま印刷します。

端末を損傷せずにバイナリデータをそのまま印刷します。

私は書いたPythonモジュールオブジェクトをダンプします。ただし、ターミナル()numpy.ndarrayにバイナリデータ(たとえば)を保持するオブジェクトと一緒に使用すると、データを印刷するとターミナルのフォントが壊れます。明らかに、特定の文字は端末制御シーケンスとして扱われます。 Windowsでは、Cygwin端末でも印刷が正常に機能します。linuxTERM=linuxminttyTERM=xterm

catバイナリファイルを使用しても同じことが起こります。

もちろん、この問題を解決するために使用できますが、reset出力が失われ、一般的に不便になる対価を払うことになります。私も知っていますがすべてではありませんが、ほとんどの制御文字にはフォントに代替グラフィック表現があります。(たとえばの場合CRです。)

だから、linux端末が特殊文字をリテラルとして処理するように元のストリームを変更する方法はありますか?基本的に次のようなことを見たいと思います。

バイナリデータ出力例

私は主にプログラム(=端末の観点から実行する必要があるタスクとパブリックシステムライブラリ(存在する場合)の実装)に興味があります。

Pythonはrepr()私の要件には適していません。印刷できないASCII文字を国の文字を含む可変長シーケンスに拡張しますが、モジュールはダンプ印刷を簡潔で読みやすくするように設計されています。

答え1

これshowconsolefontこのプログラムには256種類(または512種類...)を表示できます。文字の形Linuxコンソールからすぐに。ただし、これを行うにはシステムコールを使用します(これはコンソールデバイスへの接続でのみ機能します)。マニュアルページにはこれに対する言及はありません。

しかし、文字の形(文字の表示に使用)数値。文字を端末に印刷して表示し、文字の形にマッピングします。 Linuxコンソールに制御文字を印刷可能として扱うように指示するエスケープシーケンスはありません。

たとえば、showconsolefont実際にはそうではありません。書くセル 0-31 の制御文字です。それ地図システムコールを使用して、印刷可能文字を0から31の範囲に変換します。

追加資料:

答え2

私は変更する方法がわからない端末すべての文字が許可されます。制御文字は次のとおりです。特徴通常、端末の種類に注意を払い、使用する端末機能の正しい制御文字を生成し、印刷したい制御文字をエスケープすることはプログラムの責任です。

たとえば、Pythonプログラムを変更してこれを行う方法については、次のようにします。これスタックオーバーフローの質問です。

シェルでは、たとえば、tr制御文字を別のASCII文字(Unicode文字ではない)に変換するために使用できます。バラよりこれUnicode文字を使用できる代替案に関する質問です。

Unicodeは制御画面キャリッジリターンなどのグループ表示制御文字です。 CRがCRを意味することを聞いたことがない場合、使用する一部のフォントでは純粋に偶然でしょう。

シェルはcatバイナリをインポートするのではなく、hexdump -C同様のものを使用してチェックします。

関連情報