utf8 äöü funktoniert nicht richtig

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.
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

utf8 äöü funktoniert nicht richtig

Beitragvon Quemo » Mittwoch 17. September 2008, 08:51

Hallo.
Habe eine frage. Ich habe ein Programm angefangen zu schreiben, aber irgendwie geht das nicht richtig mit utf8

hier der code:

Code: Alles auswählen

#!/usr/bin/python

# -*- coding: utf-8 -*-

# Improtieren der Module

import sys

import cPickle

import time

import os



"""

    Name: GetContact

    Version: 0.0.1 PreAlpha

   

    This program is free software; you can redistribute it and/or

    modify it under the terms of the GNU General Public License

    as published by the Free Software Foundation; either version 3

    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,

    but WITHOUT ANY WARRANTY; without even the implied warranty of

    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

    GNU General Public License for more details.

   

    You dont have a copy of the GNU GPL - dont care about it,

    we think you know what GPL means ;)

"""



class Adressbuch(object):



    def __init(self):

        pass

   

    def main_loop(self):

        while True: #Programmschleife welche das menue immer wieder aufruft....

            print """ Was wollen sie tun?

            (1) Adressbuch Anzeigen

            (2) Neuen Kontakt anlegen

            (3) Kontaktinformationen bearbeiten

            (4) Kontakt löschen

            (0) Programm beenden"""

       

            eingabe = int(raw_input("Geben Sie eine Zahl ein!"))

            if eingabe == 1:

                print "Sie haben 1 gewählt..."

            elif eingabe == 2:

                print "Sie haben 2 gewählt..."

            elif eingabe == 3:

                print "Sie haben 3 gewählt..."

            elif eingabe == 4:

                print "Sie haben 4 gewählt..."

            elif eingabe == 0:

                exit()

            else:

                print "Falsche Eingabe."

               

    def eintrag_neu(self):

        pass

   

    def anzeigen(self):

        pass

   

    def eintrag_entfernen(self):

        pass

       

    def kontakt_edit(self):

        pass

       

    def kontakt_suche(self):

        pass

    def _kontakt_(self):
        """

        Diese Klasse steht für einen Kontakt.
        Hier werden alle informationen zwischengespeichert.
        Nachher werden sie mit cPickle in eine Datei gespeichert.

        """
        self.kontakt_vorname = ""

        self.kontakt_nachname = ""

        self.kontakt_land = ""

        self.kontakt_ort = ""

        self.kontakt_strasse = ""

        self.kontakt_hausnummer = ""

        self.kontakt_festnetz_nummer = ""

        self.kontakt_handy_nummer = ""

        self.kontakt_email = ""

        self.kontakt_jabber = ""





# Globale Variabeln

name = "Kontaktmanager"

version = "0.0.1 PreAlpha"

line = "-------------------------"



# Willkommensscreen

print line

print "", name, version

print line





if __name__ == "__main__":

    Adressbuchlistenobjekt = Adressbuch()
    Adressbuchlistenobjekt.main_loop()
   



else:

    print "Dieses Modul ist nicht zum Importieren gedacht"


wiso geht das nicht mit utf8? hab ich was falsch gemacht?

PS: Wird mein erstes Programm.
quemo.qu.ohost.de
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 17. September 2008, 08:57

Hallo und willkommen im Forum,

wozu dienen die ganzen Leerzeilen?
    a) um das Forum langsamer zu machen?
    b) um das Lesen zu erschweren?
    c) um den Interpreter zu verwirren?
    d) gilt a)-c) ?

;-)

Versuche mal die Leerzeilen vorm shebang und der Encoding-Zeile zu löschen. Funktionierts?

Gruß,
Christian
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Mittwoch 17. September 2008, 09:07

oh sorry.. ich habs einfach kopiert.. im normalen python script hab ich die leerzeichen nicht...

wieso kann ich das nicht richtig kopieren?
muss ich da was beachten ?
quemo.qu.ohost.de
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Mittwoch 17. September 2008, 09:16

Reboot hilft immer ... ^^

http://paste.ubuntuusers.de/391999/ hier die richtige Version.

Das Problem besteht aber immer noch.

Die Ausgabe:

quemo@Quemo-1:~$ who i am
quemo pts/0 2008-09-17 10:17 (:0.0)
quemo@Quemo-1:~$ cd Desktop/dev/Python/
quemo@Quemo-1:~/Desktop/dev/Python$ ls
byteofpython_120.pdf getcontact.py getcontact.py~ tut-de-21.pdf
quemo@Quemo-1:~/Desktop/dev/Python$ python getcontact.py
-------------------------
Kontaktmanager 0.0.1 PreAlpha
-------------------------
Was wollen sie tun?
(1) Adressbuch Anzeigen
(2) Neuen Kontakt anlegen
(3) Kontaktinformationen bearbeiten
(4) Kontakt l�schen
(0) Programm beenden
Geben Sie eine Zahl ein!
Zuletzt geändert von Quemo am Mittwoch 17. September 2008, 09:19, insgesamt 1-mal geändert.
quemo.qu.ohost.de
BlackJack

Beitragvon BlackJack » Mittwoch 17. September 2008, 09:18

Bitte im Wiki [wiki]Von Umlauten, Unicode und Encodings[/wiki]lesen und verstehen.

*Was* Quelltext tut sollte eigentlich aus dem Quelltext selber deutlich werden. So etwas wie ein Kommentar `Improtieren (sic) der Module` vor ``import``-Anweisungen ist überflüssig.

Die `__init()`-Methode muss `__init__()` heissen.

Benutzerschnittstelle und Programmlogik sollte man trennen. Kommunikation mit dem Benutzer gehört nicht in ein `Adressbuch`.

`_kontakt_()` ist ein eigenartiger Name und es ist eine Funktion bzw. Methode auf `Adressbuch`-Objekten und keine Klasse wie der Docstring suggeriert. Die Attribute in der Methode gehören auch nicht ans `Adressbuch` gebunden, sondern eher wirklich an ein Objekt, welches *eine* Adresse repräsentiert.

Ausführbaren Quelltext auf Modulebene ausser Definitionen von Konstanten, Funktionen, und Klassen sollte man vermeiden. Das sollte in einer `main()`-Funktion verschwinden. Konstanten bekommen per Konvention Namen, die komplett aus GROSSBUCHSTABEN bestehen. Klassennamen beginnen ebenfalls per Konvention mit einem Grossbuchstaben, alles andere mit Kleinbuchstaben.

Für Metainformationen wie Autor und Version sind auch die Namen `__author__` und `__version__` auf Modulebene verbreitet.

`Adressbuchlistenobjekt` sollte also mit einem Kleinbuchstaben beginnen. Ausserdem ist der Zusatz `objekt` überflüssig, weil *alles* was man in Python an Namen binden kann Objekte sind. Der Zusatz trägt also keinerlei Information, die man nicht auch ohne ihn hätte. Die `liste` würde ich auch weglassen und einfach `adressbuch` oder nur `adressen` nehmen. Das beschreibt ausreichend kurz, aber dennoch genau, welche Bedeutung das Objekt hat.

Das letzte ``else`` würde ich auch weglassen. Warum sollte man das Modul nicht importieren? Zum Beispiel um die einzelnen Komponenten zu testen, sich die Docstrings an zu schauen, ein weiteres Modul mit einer grafischen GUI zu den Objekten zu schreiben usw.
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Mittwoch 17. September 2008, 09:22

Ich weiss das ich viele fehler habe.. Programmiere auch ncoh nicht lange... werde mal alles überarbeiten.

Danke für die schnellen Kommentare.

Quemo
quemo.qu.ohost.de
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Mittwoch 17. September 2008, 09:41

http://www.spongedpaste.com/index.php?l=a48251d4c1

Was kann ich jetzt noch verbessern? Gibt es noch grosse Fehler?
quemo.qu.ohost.de
BlackJack

Beitragvon BlackJack » Mittwoch 17. September 2008, 10:29

Mit `__name__` überschreibst Du das Attribut, das Python selber normalerweise auf den Namen des Moduls oder '__main__' setzt; so funktioniert das ``if __name__ == '__main__':``-Idiom nicht mehr, welches Du jetzt nicht mehr verwendest.

Die Zeichenkette ab Zeile 10 gehört vor die ``import``-Anweisungen. Eine Zeichenkette ist nur dann ein "docstring", wenn sie vor den Anweisungen steht.

`Kontakt.kontakt()` sollte `Kontakt.__init__()` heissen und die ganzen `kontakt_*`-Präfixe bei den Attributen sind überflüssig. Das es sich um einen Kontakt handelt wird ja schon dadurch deutlich, das es Attribute eine Exemplars der Klasse `Kontakt` sind. Es wäre auch vorteilhaft, wenn die Attribute nicht alle mit einer leeren Zeichenkette belegt werden, sondern man die Werte als Argumente übergeben kann.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Mittwoch 17. September 2008, 15:25

Das wird erst richtig interesant wenn du deine GUI in eine exe transportieren wilst

dann kommen die module so richtig in fahrt mit den umlauten
BlackJack

Beitragvon BlackJack » Mittwoch 17. September 2008, 15:30

@sea-live: Du bist gerade auf einem "sinnlose Kommentare abgeben"-Trip, oder?
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Mittwoch 17. September 2008, 15:35

nicht wirklich BlackJack

bin halt Basicianer!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 17. September 2008, 16:17

sea-live hat geschrieben:bin halt Basicianer!

Das ist gerold auch, aber dem seine Kommentare sind nicht so überflüssig.

Und ja, Umlaute funktionieren in GUIs sehr, sehr gut. PyGTK und wxPython nutzen beide UTF-8, GTK selbst hat einen recht brauchbaren Renderer, Pango.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Beitragvon nemomuk » Mittwoch 17. September 2008, 18:32

evtl. wäre eine Ausnahmebehandlung mit try..except bei int(raw_input("Geben Sie eine Zahl ein!")) von Vorteil:

Code: Alles auswählen

try:
     int(raw_input("Geben Sie eine Zahl ein!"))
except ValueError:
    print "Keine Zahl"
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Mittwoch 17. September 2008, 18:52

SchneiderWeisse hat geschrieben:evtl. wäre eine Ausnahmebehandlung mit try..except bei int(raw_input("Geben Sie eine Zahl ein!")) von Vorteil:

Code: Alles auswählen

try:
     int(raw_input("Geben Sie eine Zahl ein!"))
except ValueError:
    print "Keine Zahl"


genau das will ich auch noch machen :D Neue Version kommt in ein paar Stunden.
quemo.qu.ohost.de

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], SmombieTV