Seite 1 von 1

frage zu unicode

Verfasst: Montag 28. September 2009, 18:52
von nmaier

Code: Alles auswählen

hi zusammen
habe eine frage zu unicode.....
wie schaffe ich mit print das zeichen phi (für winkel) auszugeben?

Verfasst: Montag 28. September 2009, 19:09
von ms4py

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.

Verfasst: Montag 28. September 2009, 19:48
von nmaier
gibt es irgendwo eine tabelle mit unichr zeichen?

Verfasst: Montag 28. September 2009, 20:16
von sma
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

Verfasst: Montag 28. September 2009, 20:19
von nmaier
ja danke :p
so weit war ich auch schon....
ich meinte woher weiss ich, dass wie in meinem fall das phi zeichen unichr(...) ist?

Verfasst: Montag 28. September 2009, 20:30
von sma
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

Verfasst: Montag 28. September 2009, 21:56
von 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

Verfasst: Montag 28. September 2009, 22:29
von ms4py
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.

Verfasst: Montag 28. September 2009, 23:31
von Leonidas
Unter GNOME verwende ich ganz oft ``gucharmap``, das hat auch eine Suchfunktion.

Verfasst: Dienstag 29. September 2009, 07:33
von nmaier
was ich nicht verstehe in der python idle funktioniert das alles....
über die eingabeaufforderung bzw im plot selbst nicht!

Verfasst: Dienstag 29. September 2009, 07:41
von 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.

Verfasst: Dienstag 29. September 2009, 07:44
von nmaier
okay und wie schaffe ich das? bzw geht das überhaupt?

Verfasst: Dienstag 29. September 2009, 07:56
von mkesper
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).

Verfasst: Dienstag 29. September 2009, 08:06
von /me
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.

Verfasst: Dienstag 29. September 2009, 08:10
von Hyperion
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

Re: frage zu unicode

Verfasst: Sonntag 17. November 2024, 14:36
von __blackjack__
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