特定のグリフの共通名を見つけるにはどうすればよいですか?


21

時々、グリフの名前を知りたいです。たとえば、表示された場合、それがハイフン-、エンダッシュ、エムダッシュ、またはマイナス記号かどうかを知りたい場合があります。これをコピーして端末に貼り付けて、それが何であるかを確認する方法はありますか?

私のシステムがこれらのグリフの共通名を知っているかどうかはわかりませんが、のようないくつかの(部分的な)情報は確かに利用可能です/usr/share/X11/locale/en_US.UTF-8/Compose。例えば、

<Multi_key> <exclam> <question>         : "‽"   U203D # INTERROBANG

別のグリフの例:🐄

回答:


30

unicodeユーティリティを試してください。

$ unicode ‽
U+203D INTERROBANG
UTF-8: e2 80 bd  UTF-16BE: 203d  Decimal: &#8253;
‽
Category: Po (Punctuation, Other)
Bidi: ON (Other Neutrals)

または、ICUパッケージのuconvユーティリティ:

$ printf %s ‽ | uconv -x any-name
\N{INTERROBANG}

recodeユーティリティを介して情報を取得することもできます。

$ printf %s ‽ | recode ..dump
UCS2   Mne   Description

203D         point exclarrogatif

またはPerlの場合:

$ printf %s ‽ | perl -CLS -Mcharnames=:full -lne 'print charnames::viacode(ord) for /./g'
INTERROBANG

これらは、グリフ全体ではなく、そのグリフを構成する文字に関する情報を提供することに注意してください。たとえば、(eと鋭アクセントの組み合わせ)の場合:

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E}\N{COMBINING ACUTE ACCENT}

スタンドアロンのé文字とは異なります:

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E WITH ACUTE}

uconvそれらを再結合するように依頼することができます(結合されたフォームを持つものの場合):

$ printf 'e\u0301b\u0301' | uconv -x '::nfc;::name;'
\N{LATIN SMALL LETTER E WITH ACUTE}\N{LATIN SMALL LETTER B}\N{COMBINING ACUTE ACCENT}

(éは結合形式ですが、b́はありません)。


なにunicode?私はそれをインストールしていないようです(Arch Linuxリポジトリで見つけることができません)。また、一体何exclarrogatifですか?[編集:私のシステムはフランス語ではありませんが、ここでもそれを取得します。]
Sparhawk

2
@Sparhawkの収縮exclamatifinterrogatifrecode80年代初期にフランス系カナダ人によって書かれました。
ステファンシャゼル

2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicodeunicodeDebian のパッケージとして入手できます。Archでのパッケージングについてはわかりません。
ジル「SO-悪であるのをやめる」

1
@PaŭloEbermann なぜprintfはechoよりも優れているのですか?。あなたが尋ねたので、あなたは答え全体を読むことが期待されています。テストがあります。
テルドン

1
@Sparhawk %sは、形式指定子(または変換指定子)と呼ばれるプレースホルダーのようなものです。printfは、これを後続の引数に置き換え、文字列として扱います(たとえば、数値ではなく)(一般にCのprintf()関数で期待される方法)。ドキュメント(pubs.opengroup.org/onlinepubs/9699919799//basedefs/…)を参照してください。
ムル

5

私が知っている最良の方法は、Perlを使用することですuniprops。PerlのUnicode::Tussleモジュールが付属しています。でインストールできます

sudo perl -MCPAN -e 'install Unicode::Tussle'

その後、テストする任意のグリフで実行できます。

$ uniprops  ‽
U+203D ‹‽› \N{INTERROBANG}
    \pP \p{Po}
    All Any Assigned InPunctuation Punct Is_Punctuation Common Zyyy Po P
       General_Punctuation Gr_Base Grapheme_Base Graph GrBase Other_Punctuation
       Pat_Syn Pattern_Syntax PatSyn Print Punctuation STerm Term
       Terminal_Punctuation Unicode X_POSIX_Graph X_POSIX_Print X_POSIX_Punct

$ uniprops  🐄
U+1F404 ‹🐄› \N{COW}
    \pS \p{So}
    All Any Assigned InMiscPictographs Common Zyyy So S Gr_Base Grapheme_Base Graph
       GrBase Misc_Pictographs Miscellaneous_Symbols_And_Pictographs Other_Symbol
       Print Symbol Unicode X_POSIX_Graph X_POSIX_Print

unipropsまた、charnames :: viacodeを内部的に使用します。
クオンルム

@cuonglmはい、ただしTussleモジュールにはあらゆる種類の派手なツールが含まれておりuniprops、モジュールを明示的に呼び出すよりもはるかに簡単に入力できます。また、名前だけでなく、より多くの情報も提供します。
テルドン

5

charnamesモジュールのPerl viacode関数を使用できます。

$ printf ‽ | perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
INTERROBANG
$ printf 🐄 | perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
COW

charnamesはperl v5.6.0で最初にリリースされました


Perl 6のは、今年のクリスマスの日に生産が可能な状態になります、それはUnicode文字のための最高のサポートを持っている場合、私が今まで見てきたので、の価値は、それをここに言及します。uninameメソッド/ルーチンを呼び出すだけです:

$ printf ‽ | perl6 -ne 'say .uniname'
INTERROBANG

(e鋭アクセントを組み合わせた場合)とスタンドアロンéキャラクターの両方が以下を提供します。

# e with combining acute accent
$ printf é | perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

# standalone é
$ printf é | perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

.uninameはの短縮形です$_.uniname


4

を使用することunicodeもできます。これは、名前だけでなく、より多くの情報も出力します。

# unicode –
U+2013 EN DASH
UTF-8: e2 80 93  UTF-16BE: 2013  Decimal: &#8211;
–
Category: Pd (Punctuation, Dash)
Bidi: ON (Other Neutrals)

なにunicode?私はそれをインストールしていないようです(Arch Linuxリポジトリで見つけることができません)。
-Sparhawk

3
私のDebianの@Sparhawkは、unicodeパッケージによってインストールされたPythonスクリプトです。Debianリポジトリからソースパッケージをダウンロードすることで取得できるはずです。
テルドン

1

これでb​​ashスクリプトを作成します。

#!/bin/bash
awk -F ":" '{print $2}' /usr/share/X11/locale/en_US.UTF-8/Compose | grep "$1" | awk -F "#" '{print $2}'

たとえば、必要な名前を付けて、namechar実行権限を付与します。

これで、たとえば以下を呼び出すことができます。

./namechar @

結果は次のようになります。

COMMERCIAL AT

これは適切ですが、完全なユニコードではなく、文字のサブセットにのみ一致します。たとえば、で失敗し🐄、に対して繰り返し結果を生成します。最後は、パイピングによって修正できます| sort -u
テルドン

はい、@ terdonは正しいです。(だから私は質問で「部分的」と言った。)このファイルには、Composeキーにマッピングされたグリフのみが含まれている。
-Sparhawk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.