xtermはubuntu 18.04で8ビット文字を表示できません。

xtermはubuntu 18.04で8ビット文字を表示できません。

私はフォーラムで見つけることができるすべてを試しましたが、kubuntu 18.04(以前のバージョンではありません)のxtermウィンドウに表示する8ビット文字を取得できませんでした。 0x20-0x7eの範囲内のすべての文字が期待どおりに表示されますが、0x80-0xfeの範囲の文字はありません。これを試みると、設定に応じて、空白またはデフォルトの暗い楕円形の疑問符の文字の外観が表示されます。私の簡単なテストは次のとおりです。

エコ-e '\xa2\xa3'

これは文字162と163(10進数)で、西洋フォントではセミコロンとポンドで表示する必要があります。 128(= 0x80)よりも多くの文字を選択してみましたが、結果は同じでした。私がテストしたさまざまな調整:

  • ロケールをUTF-8スタイルに設定します。

  • UTF-8エンコーディングに設定します(例:en_US.UTF-8)。

  • フル128-255文字セットを含むさまざまなフォントでxtermを起動します。

  • uxtermとxtermを使ってみました。

  • 単純なものに加えてエコ-eテストするには、フォントグリッド全体を表示するか、適切な vt-100 esc コマンドのシーケンスと文字列を呼び出すテストプログラムを使用します。たとえば、

    脱出(「<」 (DEC補助文字セットをG1にロード)

    Ctrl-N (外に出てG1を「左半分」GLセットにロード)

    \x32 \x33

いずれの場合も、デフォルトの文字「?」のみが表示されます。

多くの人々がフォーラムで同様の問題について書いて、上記のリストの調整で問題を解決しました。それらのどれも私のために働かなかった。

私は64ビットではなく32ビットKubuntuを実行しています。これは問題の要因になることができますか?

私たちはcursesツールを使用して128から255の範囲の文字を1つ以上表示するxtermベースのエディタを呼び出すカスタムプログラムを持っています。この文字はSun Solarisではうまく機能しますが、ncursesを持つkubuntu Linuxでは空白として表示されます。その文様を復元しながらこの追撃戦が始まりました。

助けてくれてありがとう。すべての詳細を喜んで提供します。

答え1

シェルのロケールが問題の一部です。

  • ロケールをUTF-8スタイルに設定します。

  • UTF-8エンコーディングに設定します(例:en_US.UTF-8)。

これにより、内部で実行されているアプリケーションが通知されます。xtermUTF-8を使用してください。 UTF-8エンコーディングは、0x80-0xffの範囲のコードを使用して、必要に応じてマルチバイト文字を作成します。

スタートxtermはどのような影響を与えますか?それ同じコードを説明してください。ロケールがxtermにUTF-8を使用していることを知らせる場合、xtermはUTF-8エンコーディングを使用します(参照ロケールリソース)、リソース設定によってはオフにできない場合があります。 (これはデスクトップ環境でxtermを実行するときに特に問題になります。システムロケールたとえば、UTF-8を使用します。en_US.UTF-8)。 xtermが何をしているかを見るために、右クリックしてメニューを使うことができます:項目があります「UTF-8エンコーディング」UTF-8が必要なときに確認が行われ、グレーに変わる変えられない時。

シェルがシステムのロケールを使用して初期化されている場合は、コマンドラインでこれを行うだけで十分です。

LC_ALL=en_US LANG=en-US xterm

UTF-8ではなく、ISO-8859-1とそれに関連するエンコーディングについて尋ねているようです。ロケールの名前です。いいえこれ".UTF-8"サフィックスは一般的に意味します。

これはのスクリーンショットです。テストISO-8859-1のガイドライン(使用するアプリケーションについて期待できる内容):

vttestにISO-8859-1を使用する

UTF-8を使用してエンコードすると表示される内容です。

UTF-8エンコーディングを使用したvttest

ncursesライブラリの確認ロケール(呼び出しアプリケーションを初期化する必要があります)0x80-0xffの単一バイトが完全なマルチバイトUTF-8を形成せずに空白を表示することがわかりました。ただし、ロケール(および端末)設定が一致すると、予想される文字が表示されます。


一方、あなたの質問に言及されているDECサプリメント。これはxtermのUnicodeサポートに依存しているため異なります(使用国別の文字セット)。 Latin-1はUnicodeに1-1にマッピングされますが、DECサプリメント(これはLatin-1と非常によく似ています。)いいえ。

NRCS(国別代替文字セット)モデルxtermで。 (オリジナルハードウェア端末を使用)設定選択する)。アプリケーションが実際に使用している場合DECサプリメント(これはLatin-1と非常によく似ています。)

DECサプリメントを含むvttest

または、以下を使用することもできます。DECサプリメントイラスト(再び同様です):

vttestおよびDECサプリメントグラフィック

いずれにしても、xtermはこれを行うことができます(UTF-8を有効にする)。しかし、非常に古いバージョンのUbuntuディストリビューションでは、独自のプログラムをコンパイルする必要があるかもしれません。しかし、質問の文脈で見ると、実際には以前の辞書標準文字セットではなくLatin-1を使用しているようです。

答え2

ASCII以外の文字は異なるエンコーディングを使用します。以前のISO-8859-xエンコーディングでは、文字ごとに1バイトを使用していました。例の文字(セントとポンド)は、オクテット0xa2とISO-8859-1(Latin1)文字セットを使用して0xa3エンコードされています。 UTF-8は、セント文字が2つのオクテットのシーケンスにエンコードされ、0xc2 0xa2ポンド文字がエンコードされる可変長スキームを使用します0xc2 0xa3

文字を正しく表示するには、表示したいテキストに使用されている文字エンコーディングと一致するようにロケールを設定する必要があります。ロケールをISO-8859-1に設定するか、テキストファイルをUTF-8に再エンコードする必要があります。

ISO-8859-xエンコーディングと比較してUTF-8の利点は、UTF-8がUnicode範囲全体をカバーするのに対して、以前の8ビットエンコーディングは表示可能な192文字のみをカバーすることです。

関連情報