Wie drucke ich Unicode-Glyphennamen für die Eingabezeichenfolge?

Wie drucke ich Unicode-Glyphennamen für die Eingabezeichenfolge?

Ich möchte laufen können

unicode-names 'abç'

und sehen Sie sich die entsprechenden Unicode-Zeichennamen an:

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

Das Drucken einer Zeichenfolge als Reihe von Unicode-Glyphennamen wäre in mehreren Fällen nützlich:

  • Unterscheiden Sie leicht zu verwechselnde Zeichen wie „i“ und „í“.
  • Erklären Sie, was eine Literalzeichenfolge tatsächlich enthält (z. B. nicht druckbare oder nicht zugewiesene Zeichen mit der Breite Null).

Antwort1

DerUniutilsPaket hat das Programm 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

Antwort2

Ich kenne keine gute Möglichkeit, dies zu überprüfen bash, aber Python verfügt über eine integrierte Unicode-Datenbank, die Sie beispielsweise in einem Skript wie diesem verwenden können:

#!/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)

Sie können dieses Skript folgendermaßen verwenden (vorausgesetzt, Sie haben es aufgerufen 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

Die Datenbank löst ValueErrorfür alle Zeichen, die sie nicht kennt, eine Ausnahme aus, daher drucken wir ihre Codepunkte dezimal (normalerweise sind dies nicht druckbare Zeichen).

Achtung: Das Skript geht davon aus, dass Ihr Terminal UTF-8-kodiert ist. Wenn das nicht der Fall ist, sollten Sie das Argument der decode()Methode ändern. Python unterstützt eine sehr große Auswahl an Kodierungen, Ihre wird definitiv dabei sein.

Antwort3

Ich habe udazu mal dieses Script geschrieben:

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

Benutzt als:

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

Ich habe auch diese openboxTastenkombination (für meinen Fenstermanager):

  <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>

Wenn Sie Windows+ drücken J, wird eine Benachrichtigung mit einer Beschreibung der Nicht-ASCII-Zeichen in der primären X11-Auswahl gesendet, die Sie möglicherweise nützlich finden.

verwandte Informationen