String zusammensetzen
@Sr4l: Das muss man nicht mit den Literalen Zeichenketten durchziehen. Nur wenn da etwas ausserhalb von ASCII enthalten ist. Dann fliegt einem an der entsprechenden Stelle aber auch eine Ausnahme um die Ohren.
Die escape-Sequenz \x.. in Unicode-Strings bedeutet einfach, dass ein Unicode-Zeichen als 2-stellige Hexzahl angegeben wirdSr4l hat geschrieben:*edit* noch etwas, dein "\xf6" ist latin-1 kein utf-8 ("\xc3\xb6")
und ist äquivalent zu \u00xx.
Solange sich Strings auf 7bit beschränken lassen sich Unicode- und Byte-Strings in Python ohne weitere Umwandlung kombinieren.
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Kann dir jetzt nicht ganz folgen. Mit "nur wenn außerhalb von ASCII" meinst du: "kein literal", u"beim bösen aber schon" ?BlackJack hat geschrieben:@Sr4l: Das muss man nicht mit den Literalen Zeichenketten durchziehen. Nur wenn da etwas ausserhalb von ASCII enthalten ist. Dann fliegt einem an der entsprechenden Stelle aber auch eine Ausnahme um die Ohren.
Bei mir funktioniert das aber nicht mit .format().
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
for name in [u"a", u"ä", u"ö", u"ü"]:
print repr(name)
print repr(u"{0}".format(name))
print repr("{0}".format(name))
u'a'
u'a'
'a'
u'\xe4'
u'\xe4'
Traceback (most recent call last):
File "test.py", line 6, in <module>
print repr("{0}".format(name))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 0: ordinal not in range(128)
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Code: Alles auswählen
In [1]: u = u"ä"
In [2]: s = "s"
In [3]: s + u
Out[3]: u's\xe4'
In [4]: "%s%s"%(s, u)
Out[4]: u's\xe4'
In [5]: "{} {}".format(s, u)
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-5-800d004aa231> in <module>()
----> 1 "{} {}".format(s, u)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 0: ordinal not in range(128)
In [6]: " ".join([s, u])
Out[6]: u's \xe4'
In [7]:
Alle Varianten von str + unicode ergeben unicode, außer bei format?!
@Sr4l: `str.format()` scheint tatsächlich nur mit `str` beziehungsweise `unicode` im ASCII-Bereich klar zu kommen. Bin ich bis jetzt noch nicht drüber gestolpert — ich verwende wohl immer noch zu oft den ``%``-Operator.
Klasse, mit dem ``%``-Operator geht es.BlackJack hat geschrieben:@Sr4l: `str.format()` scheint tatsächlich nur mit `str` beziehungsweise `unicode` im ASCII-Bereich klar zu kommen. Bin ich bis jetzt noch nicht drüber gestolpert — ich verwende wohl immer noch zu oft den ``%``-Operator.