ユニコード文字が正しくレンダリングされないのはなぜですか


19

バックグラウンド:

  • プロンプトにユニコード文字がいくつかあります(基本的にgitステータスマーカー)
  • Arch Linuxでxfceの下でurxvtを実行しています。
  • .Xresources行で指定された電力線フォントにDejaVu Sans Monoを使用しています。

    URxvt*font: xft:DejaVu Sans Mono for Powerline:pixelsize=14

urxvtを起動すると、Unicode文字が正しくレンダリングされません。

例えば

●âとしてレンダリング

ただし、urxvt最初のターミナル内から新しいものを起動すると、すべてが正しくレンダリングされます。

2つの端末間の環境に違いはないようです。

最初の呼び出しとネストされた呼び出しの違いは何ですか?「外側」のインスタンスではフォントが正しくないと思われますが、実行中のXウィンドウのフォントを確認する方法がわかりません

更新:xfce4のアプリランチャーでロケールが正しく設定されていないようですが、おそらく最初のターミナル内のシェルは独自のロケールを初期化するようです。つまり、両方のシェルのロケールは同じです。

追加

export LANG=en_GB.UTF-8

xfce4が開始される前の.xinitrcへの修正は、それを修正しているようです。これは正しい方法ではないと思いますが、私には十分に機能します。

スクリーンショットは問題を示しています。

ここに画像の説明を入力してください

注:この質問をserverfault.comから移動しました-このサイトがより適切であることを願っています


Xをどのように起動しますか?「最初の」端末をどのように起動しますか?これら2つの環境は異なるようです。
ЯрославРахматуллин

LC_ALL=ru_RU.utf8 urxvt現在のXセッションから実行してみてください。ロシア語(およびその他のUnicode)の文字が正しくなった場合、環境がCロケールで実行されていることになります。そのため、のロケール設定を確認してくださいxfce。たとえば、起動する場合は、の.xinitrcように実行する前にロケールを設定しようとしますLANG=ru_RU.utf8 exec startxfce4
アレクサンダーI.Grafov

同じ問題がありました。startxの起動方法が原因でした。「exec startx」を実行する代わりに、.zprofileで「startx」を実行していました
Samir Sadek

回答:


12

私は問題の原因が何であるかを完全には確信していませんが、以下の手順が役立つかもしれません:

  1. ロケールが適切に設定されていることを確認します

    $ロケール
    LANG = en_US.UTF-8
    LC_CTYPE = "en_US.UTF-8"
    LC_NUMERIC = "en_US.UTF-8"
    LC_TIME = "en_US.UTF-8"
    LC_COLLATE = "en_US.UTF-8"
    LC_MONETARY = "en_US.UTF-8"
    LC_MESSAGES = "en_US.UTF-8"
    LC_PAPER = "en_US.UTF-8"
    LC_NAME = "en_US.UTF-8"
    LC_ADDRESS = "en_US.UTF-8"
    LC_TELEPHONE = "en_US.UTF-8"
    LC_MEASUREMENT = "en_US.UTF-8"
    LC_IDENTIFICATION = "en_US.UTF-8"
    LC_ALL = en_US.UTF-8
    
  2. /etc/locale.genで目的のロケールを有効にして実行します locale-gen

    $ cat /etc/locale.gen | grep UTF
    en_US.UTF-8 UTF-8
    nb_NO.UTF-8 UTF-8
    ru_RU.UTF-8 UTF-8
    
  3. 目的のフォントをロードできることを確認してください

    $ xset + fp / usr / share / fonts / cyrillic
    $ fc-cache
    $ fc-list#チェックする

  4. 「最初の端末」を起動する前に、.Xdefaults(または同様の)から設定を適用します
    xrdb〜/ .Xdefaults


これは間違いなくロケールと関係があるため(質問に対する私の更新を参照)、正しい答えを示してこの回答を受け入れます。いいですね。
sw1nn

通常、ロケール設定を〜/ .bash_profile(〜/ .zprofile)に入れることはひどい考えではありませんが、〜/ .xinitrcも機能します。
ЯрославРахматуллин

仮想端末(Xなし)でログインすると、すべて機能します。シェルビットは正常に動作しています。Xに固有です
sw1nn

X(またはstartxfce)が、プロファイルからLANG&coを読み取らない非ログインシェルから起動されたためと思われます。bashの場合、〜/ .bashrcを使用して、非ログインシェル用のものを設定できます。しかし、私が言ったように、ロケール設定や他の変数を〜/ .xinitrcに残しても何も問題はありません。
ЯрославРахматуллин

この問題は、文字の間隔が近すぎるため、すべての文字に影響する可能性もあります。たとえば、設定するURxvt.letterSpace: -10とすべての文字がボックスとして表示されます
-DavisDude

0

私にとっては、urxvtの電力線グリフに問題がありました。ロケールを設定するlocalectl set-locale LANG=en_AU.UTF-8と、少なくともterminess powerlineフォントで問題が解決することがわかりました(他のフォントを試したことはありません)

urxvt電力線シンボル

それは動作していませんでしたen_US.UTF-8、私はそれを再現することができるので、私はかなり確信しています...今では奇妙です...しかし、今は動作します。

ソース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.