入力文字列の Unicode グリフ名を印刷するにはどうすればよいでしょうか?

入力文字列の Unicode グリフ名を印刷するにはどうすればよいでしょうか?

走れるようになりたい

unicode-names 'abç'

対応する Unicode 文字名を確認します。

LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C WITH CEDILLA

文字列を一連の Unicode グリフ名として印刷すると、次のような場合に便利です。

  • 「i」と「í」など、混同しやすい文字を区別します。
  • リテラル文字列に実際に何が含まれているかを説明します (たとえば、印刷できない文字や割り当てられていないゼロ幅の文字など)。

答え1

ユニユーティリティパッケージにはプログラムが含まれていますuniname:

$ printf %s '…—' |uniname
character  byte       UTF-32   encoded as     glyph   name
    0          0  002026   E2 80 A6       …      HORIZONTAL ELLIPSIS
    1          3  002014   E2 80 94       —      EM DASH

答え2

これを から確認する良い方法はわかりませんbashが、Python には組み込みの Unicode データベースがあり、次のようなスクリプトで使用できます。

#!/usr/bin/env python
import sys, unicodedata
for ch in sys.stdin.read().decode('utf-8'):
  try:
    print unicodedata.name(ch)
  except ValueError:
    print 'codepoint ', ord(ch)

このスクリプトは次のように使用できます ( と呼び出した場合unicode-names)。

$ echo 'abc©áοπρσ' | unicode-names
LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C
COPYRIGHT SIGN
LATIN SMALL LETTER A WITH ACUTE
GREEK SMALL LETTER OMICRON
GREEK SMALL LETTER PI
GREEK SMALL LETTER RHO
GREEK SMALL LETTER SIGMA
codepoint 10

データベースは、ValueError認識できない文字に対して例外をスローするため、それらのコードポイントを 10 進数で出力します (通常、これらは印刷できない文字です)。

注意: スクリプトは、端末が UTF-8 でエンコードされていることを前提としています。そうでない場合は、decode()メソッドの引数を変更する必要があります。Python は非常に幅広いエンコードをサポートしているので、あなたのものも間違いなくそこにあります。

答え3

私はかつてuそのためにこのスクリプトを書きました:

#! /bin/sh -
exec perl -Mcharnames=full -Mopen=locale -lne '
  printf "U+%04X %s\n", ord($_), charnames::viacode(ord($_)) for /./g' -- "$@"

使用されます:

$ u <<< '棽'
U+0119 LATIN SMALL LETTER E WITH OGONEK
U+00A3 POUND SIGN
U+00BD VULGAR FRACTION ONE HALF

私もこのopenbox(私のウィンドウ マネージャー)キー バインディングを持っています:

  <keybind key="W-J">
    <action name="Execute">
      <command>sh -c "notify-send -- \"$(xclip -o | perl -Mcharnames=:full -C -lne 'printf \"U+%04X %s\n\", $_, charnames::viacode($_) for map ord, /\P{ascii}/g')\""</command>
    </action>
  </keybind>

Windows+を押すと、J主要な X11 選択内の非 ASCII 文字を説明する通知が送信されます。これは役に立つかもしれません。

関連情報