入力文字列のUnicodeグリフ名を印刷する方法は?


12

走れるようになりたい

unicode-names 'abç'

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

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

文字列を一連のUnicodeグリフ名として印刷すると、いくつかの場合に役立ちます。

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

回答:


14

uniutilsのパッケージには、プログラムを持っていますuniname

$ echo -n …—|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

1
名前だけで、最小限の出力では、これらのオプションを使用しますecho -n …— | uniname -bcegpu
l0b0

8

これをからチェックする良い方法はわかりませんが、bashPythonには組み込みの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は非常に幅広い種類のエンコーディングをサポートしています。あなたのエンコーディングは間違いなくそこにあります。


1
より良い-使用してくださいsys.getdefaultencoding()
クリスダウン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.