私は走ったビッチX3 つの異なる Linux OS で、yakuake/konsole (OpenSUSE) と terminator/tilda (BT 5 R1) を使用した 2 つの OS (Linux OpenSUSE 11.4 と BackTrack 5 R1) で奇妙な � (疑問符) が表示されたためです。
しかし、RoxTerm を使用した PuppyLinux Lucid 528 では、文字は正しく表示されます (ギリシャ文字の「fi」です)。現在、SUSE と BT の両方で $LC_CTYPE の値を確認しましたが、Puppy Linux と同じでした (つまり en_US なので、utf-8 エンコードではありません)。
私は SUSE と BT の両方で異なる文字エンコード (ターミナルの設定から) を試しましたが、変化に気付きました。しかし、テキストがまだ時々文字化けし、疑問符の代わりに奇妙で理解不能な「u」が表示されました (Puppy では常に正しく表示されます)。
この厄介な問題の原因は何でしょうか?
何が違うのでしょうか? また、その違いをどのように確認すればよいのでしょうか?
答え1
ここではいくつかのことが起こっています。
LC_CTYPE=en_US
まず、それが「utf-8 なし」を意味するかどうか確認できますか?
このnl_langinfo
関数は、たとえば次のような場合に役立ちます。
$ python
>>> import locale
>>> locale.setlocale(locale.LC_CTYPE, 'en_US')
'en_US'
>>> locale.nl_langinfo(locale.CODESET)
'ISO-8859-1'
次に、一度に 1 つの変数だけを変更してみると役立ちます。たとえば、RoxTerm が PuppyLinux で動作する場合、OpenSUSE や BackTrack でも動作しますか? また、BitchX
違いがある場合に備えて、使用している のバージョンも教えていただけますか?
最後に、IRC は実際には文字エンコード情報を提供しないので、サーバーとチャンネル内のすべてのユーザーが文字エンコードについて合意する必要があります。最近ではほとんどのユーザーが UTF-8 を使用していると思いますので、設定を UTF-8 に変更してみてはいかがでしょうか。
アップデート
BitchX は UTF-8 をサポートしていないとおっしゃいました。
そうすると、他のユーザーと話すときに問題が発生すると思います。
しかし、他の全員がギリシャ語を話し、BitchXも使用している場合は、ギリシャ語 ISO-8859-7 文字セット。
私のシステムでは、ISO-8859-7 をすぐにサポートするロケールはギリシャ語の 2 つだけです (例: ) el_GR.iso88597
。
実行してlocale -a
オプションの完全なリストを表示し、その文字セットを含むオプションを選択します。
答え2
菱形の疑問符は、クライアント プログラムが文字を受け入れて表示エンジンに渡している (bitchX は唯一のターミナル プログラムであるというのは正しいでしょうか?) が、ターミナルがそれをレンダリングできないことを意味している可能性があります。したがって、ターミナルの設定の問題である可能性があります (たとえば、選択したフォントにギリシャ文字のグリフが含まれていない)。このターミナルから「hexdump -C」などを実行して別のターミナルにコピー & ペーストすることでテストできます。これにより、phi コードポイント (U+03C6、つまり utf-8 の 16 進ダンプでは `CF 86') が表示されます。その場合は、ギリシャ語をサポートするフォントを選択してください。
\u03C6 などが表示される場合、ロケールが壊れている (Unicode ではない) 可能性が高いため、クライアントは文字を受け入れ、Unicode 処理を適用しますが、直接出力できず、フォールバック モードに切り替わります。したがって、SuSE と BT の両方のセットアップで、非 Unicode コーディング (おそらく ISO-8859-1) のエイリアスとして en_US が使用されていると考えられます。en_US.UTF-8 を直接設定して、効果を比較してみてください。