ascii -> unicode - zu naiv gedacht?

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
d@tenmaulwurf
User
Beiträge: 7
Registriert: Dienstag 2. Mai 2006, 11:27

Sonntag 6. Mai 2007, 13:32

Hallo!

Ich möchte mit meinem Code ein Toolkit ansprechen, welches nur unicode-strings akzeptiert.
Gut dachte ich, kein Problem - packste über jeden ASCII-String den du an das Toolkit schicken willst nen unicode() drum rum.
Das geht auch solange, wie der ASCII-String keine Sonderzeichen enthält.

Einfaches Bsp.:

Code: Alles auswählen

>>> string='*&&/$üöäÜÖÄÖÜ'
>>> print string
*&&/$üöäÜÖÄÖÜ
>>> print unicode(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128)
Ich mein, ich kann ja verstehen, dass es Probleme beim Konvertieren von UNICODE auf ASCII geben kann, da hier im Unicodestring Zeichen enthalten sein könnten, die nicht im ASCII-Satz sind.
Aber umgekehrt ?? Jedes ASCII-Zeichen ist im UNICODE-Satz vertreten - sogar mit der selben ID (ascii(char) == utf8(char)).

Habe ich zu naiv gedacht? Die Strings hole ich mir von einer Webseite über HTTP und möchte die unicode-konvertiert an das Toolkit weitergeben - also in Form von Pseudocode:

toolkit(unicode(urllib.urlopen('http://www.google.de')))

Wenn diese Seite jetzt Sonderzeichen enthält (was sie tut), dann wird die selbe exception geschmissen wie im vorhergehenden Bsp.

Wie bekomme ich nun also meine Daten von der Seite inkl. Sonderzeichen zum Toolkit?

Vielen Dank im voraus und einen schönen Sonntag noch,

d@tenmaulwurf
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Sonntag 6. Mai 2007, 13:41

Hoi,

http://www.python-forum.de/viewtopic.php?p=22701#22701
BlackJack hat geschrieben: Unicode Zeichenketten können nur innerhalb von laufenden Programmen existieren. Wenn Du Daten einlesen oder ausgeben willst, dann müssen die irgendwie kodiert werden, zum Beispiel als UTF-8. Wenn Du Unicode Zeichenketten im Quelltext angibst, dann bewirkt das 'u' davor, das Python diese Zeichenkette dekodiert, weil man Unicode ja nicht in einer Datei stehen haben kann, sondern immer nur eine Kodierung davon. Es wird die Kodierung zum dekodieren genommen, die oben in der Datei als spezieller Kommentar angegeben ist, oder ASCII falls der Kommentar nicht im Quelltext steht.
Deshalb kannst du unicode(string) nicht ausgeben lassen.


Cheers,
Rafael
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 6. Mai 2007, 13:56

d@tenmaulwurf hat geschrieben:Das geht auch solange, wie der ASCII-String keine Sonderzeichen enthält.
Das ist der Denkfehler. Das ist eben kein ASCII-String, sondern ein Bytestring.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 6. Mai 2007, 14:15

d@tenmaulwurf hat geschrieben:Gut dachte ich, kein Problem - packste über jeden ASCII-String den du an das Toolkit schicken willst nen unicode() drum rum. Das geht auch solange, wie der ASCII-String keine Sonderzeichen enthält.
Hallo d@tenmaulwurf!

Da hatte ich mal etwas zu diesem Thema geschrieben:
http://www.python-forum.de/topic-5095.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sonntag 6. Mai 2007, 14:36

Und wieder darf ich auf die korrigierte Version im Wiki hinweisen: [wiki]Von Umlauten, Unicode und Encodings[/wiki]
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Montag 7. Mai 2007, 19:33

d@tenmaulwurf hat geschrieben:Aber umgekehrt ?? Jedes ASCII-Zeichen ist im UNICODE-Satz vertreten - sogar mit der selben ID (ascii(char) == utf8(char)).
Das stimmt auch. Nur gehen ASCII-Codes nur von 0 bis 127. Alles darüber sind localespezifische Erweiterungen (im Windows/DOS-Jargon: Codepages)

Du verwechselst ASCII wahrscheinlich mit LATIN-1 / ISO 8859-1
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Montag 7. Mai 2007, 20:09

birkenfeld hat geschrieben:Und wieder darf ich auf die korrigierte Version im Wiki hinweisen: [wiki]Von Umlauten, Unicode und Encodings[/wiki]
Editier doch den Post und verweis auf den Wikiartikel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 7. Mai 2007, 20:16

rafael hat geschrieben:Editier doch den Post und verweis auf den Wikiartikel
Bisch du deppat??? :evil: :x
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 9. Mai 2007, 16:21

gerold hat geschrieben:
rafael hat geschrieben:Editier doch den Post und verweis auf den Wikiartikel
Bisch du deppat??? :evil: :x
Was wäre daran so falsch, abgesehen davon dass du es machen müsstest?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 9. Mai 2007, 16:48

birkenfeld hat geschrieben:Was wäre daran so falsch
Hallo birkenfeld!

1.)

Mein Text war auf "Einfachheit" getrimmt. Nicht perfekt, aber man tut was man kann und nicht mehr.

Es ist ja nicht schlecht, was du daraus im Wiki gemacht hast, aber der Text von dir ist, in meinen Augen, für Anfänger nicht mehr so einfach zu verstehen, wie meiner.

Deshalb verlinke ich lieber auf die Anleitung hier im Forum. Ich hatte hier im Forum darum gebeten, Änderungsvorschläge zu posten. Da sich niemand gemeldet hat, bleibt der Artikel vorerst so wie er ist. Auch *das* ist Meinungsfreiheit.

2.)

Dieses Forum darf NIE zu einem Wiki verkommen. Das darf ich nicht zulassen. Wenn ein Admin, auch wenn er es technisch könnte, einen Link in einem Beitrag eines Anderen verändern würde, dann wäre das, für mich, zu viel des Guten.

Bei einem WIKI gewinnt immer die Meinung des hartnäckigeren -- von dem der mehr Zeit investiert oder investieren kann. Das ist auch das Problem von Wikipedia.

Ich möchte nicht, dass unser Python-Forum sich in diese Richtung entwickelt. -- Und deshalb hoffe ich darauf, dass unser Python-Forum so bleibt wie es ist und keiner Beiträge eines Anderen mehr als marginal verändert.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten