frage zu unicode

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nmaier
User
Beiträge: 7
Registriert: Montag 28. September 2009, 18:46

Code: Alles auswählen

hi zusammen
habe eine frage zu unicode.....
wie schaffe ich mit print das zeichen phi (für winkel) auszugeben?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

print u'Φ  φ'
Edit: Das Forum zeigt die Unicode-Zeichen nicht an :(
Tipp: Kopier einfach die Zeichen, z.B. von Wikipedia (http://de.wikipedia.org/wiki/Phi)

Edit2: Funktioniert in der Standard-(Win-)-Konsole leider auch nicht, ansonsten funktioniert das:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

print unichr(934), unichr(966)
Eventuell kann die Win-Konsole das aber auch gar nicht.
nmaier
User
Beiträge: 7
Registriert: Montag 28. September 2009, 18:46

gibt es irgendwo eine tabelle mit unichr zeichen?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Hm, Unicode. Wo könnte man das wohl im Internet finden? Vielleicht auf http://www.unicode.org? Nein, das wäre bestimmt zu naheliegend...

Stefan
nmaier
User
Beiträge: 7
Registriert: Montag 28. September 2009, 18:46

ja danke :p
so weit war ich auch schon....
ich meinte woher weiss ich, dass wie in meinem fall das phi zeichen unichr(...) ist?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Von Codepoint zum Zeichen gibt es da eine Suchfunktion. Wenn man aber weiß, dass φ ein griechisches Zeichen ist, ist es nur ein Klick zu dem PDF, wo alle griechischen Zeichen beschrieben sind und dort findet man schnell, dass der Codepoint für GREEK SMALL LETTER PHI 0x03C6 ist.

Auf der von mir verlinkten Seite findet man auch http://www.unicode.org/charts/charindex.html, was eine alphabetische Liste aller beschreibenden Namen ist. Hilft aber auch nicht, weil man jetzt den Namen einigermaßen kennen muss, da die Liste dreigeteilt ist. Naja, eine Google-Suche beschränkt auf diese URL könnte helfen...

Mein Mac hat übrigens ein Tool namens Zeichenpalette, welche ein Suchfeld hat, in das man einfach PHI eingeben kann und schon werden einem sechs Varianten (sowie weitere Zeichen, deren beschreibener Name zufällig diese Buchstabenfolge enthält) angezeigt.

Stefan
BlackJack

Ein kleines Suchprogramm kann man sich auch schnell in Python zusammenhacken:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
import sys
import unicodedata


def search_unicode_names(words):
    words = [w.upper() for w in words]
    for codepoint in xrange(2**16):
        character = unichr(codepoint)
        name = unicodedata.name(character, '')
        if all(w in name for w in words):
            yield (codepoint, character, name)


def main():
    for match in search_unicode_names(sys.argv[1:]):
        print u'Codepoint: %d, Zeichen: %c\nName: %s' % match


if __name__ == '__main__':
    main()
Test mit 'greek phi':

Code: Alles auswählen

bj@s8n:~$ ./forum4.py greek phi
Codepoint: 934, Zeichen: Φ
Name: GREEK CAPITAL LETTER PHI
Codepoint: 966, Zeichen: φ
Name: GREEK SMALL LETTER PHI
Codepoint: 981, Zeichen: ϕ
Name: GREEK PHI SYMBOL
Codepoint: 7520, Zeichen: ᵠ
Name: MODIFIER LETTER SMALL GREEK PHI
Codepoint: 7529, Zeichen: ᵩ
Name: GREEK SUBSCRIPT SMALL LETTER PHI
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Unter Windows:
Windowstaste+R (bzw. Start->Ausführen) >> "charmap"
Hier kann man unter "Erweiterte Ansicht" suchen (und komm mit PHI außerdem auf 8 Ergebnisse ;) ). In der Statusleiste siehst du dann den vierstelligen Unicode-Code, z.B. U+0278.
Den kannst du dann in Python so einbinden:

Code: Alles auswählen

phi_chr = u'\u0278'
Also immer mit

Code: Alles auswählen

\uXXXX
für ein Zeichen, wobei das XXXX natürlich für die 4 Zeichen steht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Unter GNOME verwende ich ganz oft ``gucharmap``, das hat auch eine Suchfunktion.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nmaier
User
Beiträge: 7
Registriert: Montag 28. September 2009, 18:46

was ich nicht verstehe in der python idle funktioniert das alles....
über die eingabeaufforderung bzw im plot selbst nicht!
BlackJack

@nmaier: Die "Umgebung", die ein Zeichen ausgeben soll, muss 1. dieses Zeichen auch unterstützen und 2. wenn sie nicht direkt Unicode verarbeiten kann, wie zum Beispiel die Windows-Eingabeaufforderung, müssen die Daten in der richtigen Kodierung dort ankommen.
nmaier
User
Beiträge: 7
Registriert: Montag 28. September 2009, 18:46

okay und wie schaffe ich das? bzw geht das überhaupt?
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

nmaier hat geschrieben:was ich nicht verstehe in der python idle funktioniert das alles....
über die eingabeaufforderung bzw im plot selbst nicht!
Es muss auch eine Ausgabe verwendet werden, die Unicode-Zeichen darstellen kann. Die Dosbox kann es nicht (und verwendet auch nicht das windows-1252 coding).
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

nmaier hat geschrieben:okay und wie schaffe ich das? bzw geht das überhaupt?
Nun, da stellt sich die Frage, welche Sonderzeichen von der Konsole unterstützt werden. Wenn dein Originalstring als Unicode vorliegt, dann könntest du es mit

Code: Alles auswählen

print(daten.encode(sys.stdout.encoding))
versuchen. "import sys" nicht vergessen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auch hier hilft zusätzlich denke ich wieder der übliche Verweis aufs wiki usw.; da ich das kürzlich erst wieder gemacht habe, hier der Thread:

http://www.python-forum.de/topic-20314. ... icode+wiki
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ein kleines Update zu dem Suchprogramm von Python 2 auf Python 3 und nicht nur die ersten 65535 möglichen Codepoints durchsuchend. Heute gibt's ja eine Menge Emojis & Co.

Code: Alles auswählen

#!/usr/bin/env python3
import sys
import unicodedata

from attrs import field, frozen


@frozen
class Entry:
    codepoint = field()
    character = field()
    name = field()

    @classmethod
    def from_codepoint(cls, codepoint):
        character = chr(codepoint)
        return Entry(codepoint, character, unicodedata.name(character, None))


def generate_entries():
    return (
        entry
        for entry in map(Entry.from_codepoint, range(sys.maxunicode))
        if entry.name is not None
    )


def search_unicode_names(words):
    words = [word.upper() for word in words]
    return (
        entry
        for entry in generate_entries()
        if all(word in entry.name for word in words)
    )


def main():
    if len(sys.argv) == 1:
        entry_count = sum(1 for _ in generate_entries())
        print(
            f"Find unicode characters by name.\n"
            f"Search backed by unicode database v{unicodedata.unidata_version}"
            f" ({entry_count:,} named characters).\n"
            f"Usage: {sys.argv[0]} NAME_FRAGMENTS..."
        )
    else:
        for match in search_unicode_names(sys.argv[1:]):
            print(
                f"codepoint: {match.codepoint} (0x{match.codepoint:04X}),"
                f" character: {match.character}\n"
                f"name: {match.name}"
            )


if __name__ == "__main__":
    main()
Der Test von damals, die Suche nach dem griechischen „phi“ bringt jetzt mehr Treffer. Und dann noch eine Suche mit Herz. 😉

Code: Alles auswählen

$ ./find_unicode.py 
Find unicode characters by name.
Search backed by unicode database v13.0.0 (137,714 named characters).
Usage: find_unicode.py NAME_FRAGMENTS...

$ ./find_unicode.py greek phi
codepoint: 934 (0x03A6), character: Φ
name: GREEK CAPITAL LETTER PHI
codepoint: 966 (0x03C6), character: φ
name: GREEK SMALL LETTER PHI
codepoint: 981 (0x03D5), character: ϕ
name: GREEK PHI SYMBOL
codepoint: 7520 (0x1D60), character: ᵠ
name: MODIFIER LETTER SMALL GREEK PHI
codepoint: 7529 (0x1D69), character: ᵩ
name: GREEK SUBSCRIPT SMALL LETTER PHI
codepoint: 65907 (0x10173), character: 𐅳
name: GREEK ACROPHONIC DELPHIC FIVE MNAS

$ ./find_unicode.py heart
codepoint: 9753 (0x2619), character: ☙
name: REVERSED ROTATED FLORAL HEART BULLET
codepoint: 9825 (0x2661), character: ♡
name: WHITE HEART SUIT
codepoint: 9829 (0x2665), character: ♥
name: BLACK HEART SUIT
codepoint: 10083 (0x2763), character: ❣
name: HEAVY HEART EXCLAMATION MARK ORNAMENT
codepoint: 10084 (0x2764), character: ❤
name: HEAVY BLACK HEART
codepoint: 10085 (0x2765), character: ❥
name: ROTATED HEAVY BLACK HEART BULLET
codepoint: 10086 (0x2766), character: ❦
name: FLORAL HEART
codepoint: 10087 (0x2767), character: ❧
name: ROTATED FLORAL HEART BULLET
codepoint: 11926 (0x2E96), character: ⺖
name: CJK RADICAL HEART ONE
codepoint: 11927 (0x2E97), character: ⺗
name: CJK RADICAL HEART TWO
codepoint: 12092 (0x2F3C), character: ⼼
name: KANGXI RADICAL HEART
codepoint: 127153 (0x1F0B1), character: 🂱
name: PLAYING CARD ACE OF HEARTS
codepoint: 127154 (0x1F0B2), character: 🂲
name: PLAYING CARD TWO OF HEARTS
codepoint: 127155 (0x1F0B3), character: 🂳
name: PLAYING CARD THREE OF HEARTS
codepoint: 127156 (0x1F0B4), character: 🂴
name: PLAYING CARD FOUR OF HEARTS
codepoint: 127157 (0x1F0B5), character: 🂵
name: PLAYING CARD FIVE OF HEARTS
codepoint: 127158 (0x1F0B6), character: 🂶
name: PLAYING CARD SIX OF HEARTS
codepoint: 127159 (0x1F0B7), character: 🂷
name: PLAYING CARD SEVEN OF HEARTS
codepoint: 127160 (0x1F0B8), character: 🂸
name: PLAYING CARD EIGHT OF HEARTS
codepoint: 127161 (0x1F0B9), character: 🂹
name: PLAYING CARD NINE OF HEARTS
codepoint: 127162 (0x1F0BA), character: 🂺
name: PLAYING CARD TEN OF HEARTS
codepoint: 127163 (0x1F0BB), character: 🂻
name: PLAYING CARD JACK OF HEARTS
codepoint: 127164 (0x1F0BC), character: 🂼
name: PLAYING CARD KNIGHT OF HEARTS
codepoint: 127165 (0x1F0BD), character: 🂽
name: PLAYING CARD QUEEN OF HEARTS
codepoint: 127166 (0x1F0BE), character: 🂾
name: PLAYING CARD KING OF HEARTS
codepoint: 127892 (0x1F394), character: 🎔
name: HEART WITH TIP ON THE LEFT
codepoint: 128145 (0x1F491), character: 💑
name: COUPLE WITH HEART
codepoint: 128147 (0x1F493), character: 💓
name: BEATING HEART
codepoint: 128148 (0x1F494), character: 💔
name: BROKEN HEART
codepoint: 128149 (0x1F495), character: 💕
name: TWO HEARTS
codepoint: 128150 (0x1F496), character: 💖
name: SPARKLING HEART
codepoint: 128151 (0x1F497), character: 💗
name: GROWING HEART
codepoint: 128152 (0x1F498), character: 💘
name: HEART WITH ARROW
codepoint: 128153 (0x1F499), character: 💙
name: BLUE HEART
codepoint: 128154 (0x1F49A), character: 💚
name: GREEN HEART
codepoint: 128155 (0x1F49B), character: 💛
name: YELLOW HEART
codepoint: 128156 (0x1F49C), character: 💜
name: PURPLE HEART
codepoint: 128157 (0x1F49D), character: 💝
name: HEART WITH RIBBON
codepoint: 128158 (0x1F49E), character: 💞
name: REVOLVING HEARTS
codepoint: 128159 (0x1F49F), character: 💟
name: HEART DECORATION
codepoint: 128420 (0x1F5A4), character: 🖤
name: BLACK HEART
codepoint: 128525 (0x1F60D), character: 😍
name: SMILING FACE WITH HEART-SHAPED EYES
codepoint: 128571 (0x1F63B), character: 😻
name: SMILING CAT FACE WITH HEART-SHAPED EYES
codepoint: 129293 (0x1F90D), character: 🤍
name: WHITE HEART
codepoint: 129294 (0x1F90E), character: 🤎
name: BROWN HEART
codepoint: 129392 (0x1F970), character: 🥰
name: SMILING FACE WITH SMILING EYES AND THREE HEARTS
codepoint: 129505 (0x1F9E1), character: 🧡
name: ORANGE HEART
codepoint: 129728 (0x1FAC0), character: 🫀
name: ANATOMICAL HEART
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten