Seite 1 von 1

Problem mit Unicode String zusammensetzen

Verfasst: Sonntag 8. März 2009, 03:04
von DaSch
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

Re: Problem mit Unicode String zusammensetzen

Verfasst: Sonntag 8. März 2009, 06:02
von Hyperion
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

Verfasst: Sonntag 8. März 2009, 11:49
von DaSch
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")

Verfasst: Sonntag 8. März 2009, 23:31
von Hyperion
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?

Verfasst: Montag 9. März 2009, 10:12
von 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.