Wie drucke ich Unicode-Glyphennamen für Eingabezeichenfolgen?

12

Ich würde gerne rennen können

unicode-names 'abç'

und sehen Sie die entsprechenden Unicode-Zeichennamen:

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

Das Drucken einer Zeichenfolge als eine Reihe von Unicode-Glyphennamen ist in mehreren Fällen hilfreich:

  • Unterscheiden Sie leicht verwirrte Zeichen wie "i" und "í".
  • Erklären Sie, was eine Literalzeichenfolge tatsächlich enthält (z. B. nicht druckbare oder nicht zugewiesene Zeichen mit einer Breite von Null).
l0b0
quelle

Antworten:

14

Das uniutils- Paket enthält das Programm 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
nicht erfolgreich
quelle
1
Verwenden Sie für eine minimale Ausgabe mit nur den Namen die folgenden Optionen:echo -n …— | uniname -bcegpu
l0b0
8

Ich kenne keine gute Möglichkeit, dies zu überprüfen bash, aber Python verfügt über eine integrierte Unicode-Datenbank, die Sie wie 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 ValueErrorlöst eine Ausnahme für Zeichen aus, von denen sie nichts weiß. Daher drucken wir ihre Codepunkte dezimal aus (dies sind normalerweise nicht druckbare Zeichen).

Vorsichtsmaßnahme: Das Skript geht davon aus, dass Ihr Terminal UTF-8-codiert ist. Ist dies nicht der Fall, sollten Sie das Argument der decode()Methode ändern . Python unterstützt eine sehr große Auswahl an Codierungen, Ihre werden auf jeden Fall dabei sein.

Alexios
quelle
1
Besser nutzen sys.getdefaultencoding().
Chris Down