Seite 1 von 1

ascii -> unicode - zu naiv gedacht?

Verfasst: Sonntag 6. Mai 2007, 13:32
von d@tenmaulwurf
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

Verfasst: Sonntag 6. Mai 2007, 13:41
von rafael
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

Re: ascii -> unicode - zu naiv gedacht?

Verfasst: Sonntag 6. Mai 2007, 13:56
von Leonidas
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.

Re: ascii -> unicode - zu naiv gedacht?

Verfasst: Sonntag 6. Mai 2007, 14:15
von gerold
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
:-)

Verfasst: Sonntag 6. Mai 2007, 14:36
von birkenfeld
Und wieder darf ich auf die korrigierte Version im Wiki hinweisen: [wiki]Von Umlauten, Unicode und Encodings[/wiki]

Re: ascii -> unicode - zu naiv gedacht?

Verfasst: Montag 7. Mai 2007, 19:33
von Joghurt
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

Verfasst: Montag 7. Mai 2007, 20:09
von rafael
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

Verfasst: Montag 7. Mai 2007, 20:16
von gerold
rafael hat geschrieben:Editier doch den Post und verweis auf den Wikiartikel
Bisch du deppat??? :evil: :x

Verfasst: Mittwoch 9. Mai 2007, 16:21
von birkenfeld
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?

Verfasst: Mittwoch 9. Mai 2007, 16:48
von gerold
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
:-)