Problem mit Unicode String zusammensetzen

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.
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Problem mit Unicode String zusammensetzen

Beitragvon DaSch » Sonntag 8. März 2009, 03:04

Ich hab so ein kleines Problem und ich weiß nicht wo der Fehler liegt

Code: Alles auswählen

if sub2.startswith("xn--"):
   sub2 = idna.ToUnicode(sub2)
   print "IDNA convers:" + sub2
sitemap.write("\t\t<loc>http://") + sub2 + ".wecowi." + top + "</loc>\r\n")


Naja und da tritt immer der Fehler
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 15: ordinal not in range(128)

was muss ich da machen? Wenn ich die anderen Stringteile auch in Unicode umwandel dann ändert sich nix
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Re: Problem mit Unicode String zusammensetzen

Beitragvon Hyperion » Sonntag 8. März 2009, 06:02

DaSch hat geschrieben:Ich hab so ein kleines Problem und ich weiß nicht wo der Fehler liegt

...

was muss ich da machen?

Diesen Thread durchlesen und die Links in meinem Posting durcharbeiten ;-)

http://www.python-forum.de/topic-18018.html
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Beitragvon DaSch » Sonntag 8. März 2009, 11:49

Für alle die es einfacher haben wollen

1. unicode ist weder UTF-8, noch UTF-16, noch UTF-32 (das, was Microsoft leider als "Unicode" bezeichnet, ist UTF-16)

2. So sieht die Lösung aus

Code: Alles auswählen

            if sub2.startswith("xn--"):
               sub2 = idna.ToUnicode(sub2)
               print "IDNA convers:" + sub2
            sub2 = sub2.encode("utf-8")
            sitemap.write("\t\t<loc>http://" + sub2 + ".wecowi." + top + "</loc>\r\n")
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Sonntag 8. März 2009, 23:31

DaSch hat geschrieben:2. So sieht die Lösung aus

Code: Alles auswählen

            if sub2.startswith("xn--"):
               sub2 = idna.ToUnicode(sub2)
               print "IDNA convers:" + sub2
            sub2 = sub2.encode("utf-8")
            sitemap.write("\t\t<loc>http://" + sub2 + ".wecowi." + top + "</loc>\r\n")

Das ist aber eine eher schlechte "Lösung"! Wieso nutzt Du denn nicht einfach Unicode und wandelst erst am Schluss zurück in ein bestimmtes Encoding?
BlackJack

Beitragvon BlackJack » Montag 9. März 2009, 10:12

@Hyperion: Das wird doch hier (fast) gemacht. Kurz vorm rausschreiben in eine Datei wird in Bytes umgewandelt. Einziges potentielles Problem ist, dass man nur Kodierungen verwenden kann, bei denen ASCII eine Untermenge ist. UTF-16 ginge also zum Beispiel nicht.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]