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

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: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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:

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: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

@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.
Antworten