Seite 1 von 2
Re: String zusammensetzen
Verfasst: Mittwoch 13. März 2013, 16:17
von BlackJack
@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.
Re: String zusammensetzen
Verfasst: Mittwoch 13. März 2013, 16:48
von Sirius3
Sr4l hat geschrieben:*edit* noch etwas, dein "\xf6" ist latin-1 kein utf-8 ("\xc3\xb6")
Die escape-Sequenz \x.. in Unicode-Strings bedeutet einfach, dass ein Unicode-Zeichen als 2-stellige Hexzahl angegeben wird
und ist äquivalent zu \u00xx.
Solange sich Strings auf 7bit beschränken lassen sich Unicode- und Byte-Strings in Python ohne weitere Umwandlung kombinieren.
Re: String zusammensetzen
Verfasst: Mittwoch 13. März 2013, 16:51
von Sr4l
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.
Kann dir jetzt nicht ganz folgen. Mit "nur wenn außerhalb von ASCII" meinst du: "kein literal", u"beim bösen aber schon" ?
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)
Re: String zusammensetzen
Verfasst: Mittwoch 13. März 2013, 17:15
von Sr4l
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]:
Das ist ein Bug oder?
Alle Varianten von str + unicode ergeben unicode, außer bei format?!
Re: String zusammensetzen
Verfasst: Mittwoch 13. März 2013, 17:23
von BlackJack
@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.

Re: String zusammensetzen
Verfasst: Donnerstag 14. März 2013, 13:06
von peddy
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.

Klasse, mit dem ``%``-Operator geht es.
Re: String zusammensetzen
Verfasst: Donnerstag 14. März 2013, 13:21
von EyDu
Du hast jetzt nicht wirklich das überlegene format durch % ersetzt, anstatt vor den Formatstring einfach ein u zu schreiben, oder?