web-dev-qa-db-ja.com

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

バックグラウンド:

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

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

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

例えば

●としてレンダリング

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

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

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

[〜#〜] update [〜#〜]:xfce4のアプリランチャーでロケールが正しく設定されていないようですが、おそらく最初のターミナル内のシェルが独自のロケールを初期化しているため、両方のシェルのロケールが同じであること。

追加

export LANG=en_GB.UTF-8

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

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

enter image description here

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

19
sw1nn

問題の原因が何であるかは完全にはわかりませんが、以下の手順が役立つ場合があります。

  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

私にとっては、urxvtの電力線グリフの問題でした。ロケールをlocalectl set-locale LANG=en_AU.UTF-8で設定すると問題が解決することを知りました。少なくともターミネスパワーラインフォントで(他のフォントは試していません)

urxvt powerline symbols

en_US.UTF-8では機能していませんでした。再現できるので、きっと確信しています...不思議なことですが、動作します。

ソース

0
sera