web-dev-qa-db-ja.com

奇妙なユニコードの振る舞い

私はArch Linuxを使用していますが、うまくいかないように思えるのは、Unicodeフォントです。

問題の例を挙げます。これがgucharmapのスクリーンショットです: gucharmap

左上で選択したグリフは正常にレンダリングされますが、コピーするテキストは、おそらく別のフォントとはまったく異なるアイコンとしてレンダリングされます。

次に、同じアイコンを表示するurxvtのスクリーンショットを示します。

urxvt

ご覧のように、いくつかのボックスをレンダリングするだけです。これは、ほとんどのアプリケーションで最も一般的な動作です。

また herefc-listの出力です(長すぎるため、ペーストビンにあります)。多分、役に立つかもしれません。

だから私が考えているのは、Unicode領域がマテリアルアイコンのフォントと重複する別のフォントがインストールされていることです。私の質問は、それをどのように修正するのですか?そして、これは間違っていることですか?

[〜#〜]更新[〜#〜]

fontconfigを次のように変更:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
    <family>serif</family>
    <prefer><family>Noto Sans</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
<alias>
    <family>sans-serif</family>
    <prefer><family>Noto Sans</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
<alias>
    <family>sans</family>
    <prefer><family>Linux Libertine</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
<alias>
    <family>monospace</family>
    <prefer><family>Hack</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
</fontconfig

は、gucharmapグリフがコピーするテキストと一致しない問題を修正しましたが、アプリケーションがグリフをレンダリングしないという問題は依然として残っています。

これにより、問題はアプリケーションがグリフのレンダリングに正しいフォントを使用していないことにあると思います。エイリアスにdefaultタグを設定するとエイリアスが作成され、優先フォントにUnicode文字が含まれていない場合に代替として使用されると想定しました。私はこれは間違っているように感じます、しかし docs は本当にそれを明確にしません。

[〜#〜]更新[〜#〜]

誰かがlocaleの出力を要求したので、ここに示します。

LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=
4

このような問題を自分でトラブルシューティングできるように、物事がどのように機能するかを理解できるようにしたいと思います。あなたと何が起こっているかは非常に正常な行動です。

ただし、グリフをレンダリングしないアプリケーションの問題はまだ残っています

どのアプリケーションが失敗するかについては触れませんでした。各アプリケーションに移動し、グリフを含むフォントを設定する必要があります。例えばLibreOffice、Tools -> Options -> LibreOffice Writer -> Basic Fonts (Western)、またはBasic Fonts (CTL)に移動し、Default, Heading, List, Caption, Index"のフォントを設定します。あなたの設定ファイルがそれを制御することを期待すべきではありません。

それからあなたは尋ねるかもしれません:

なぜfontconfigなのか?preferdefault、...とは何か、およびman fonts-confで言及されていることすべて

Oneアプリケーションにフォントを設定する方法がなく、fontconfigに従うだけの場合に使用しますantherは、serifsans-serifmonospaceなどの一般的なファミリ名の用語でアプリケーションを構成する場合に使用します、... ここ、アプリケーションはfontconfigで優先フォントを調べます。

繰り返しますが、すべてのアプリケーションにはフォントを設定する方法があります。それらのそれぞれについて、意図したとおりに構成する必要があります。 必要なフォントをすべてのアプリケーションに強制的に使用させる方法はありませんです。

1
Munzir Taha