7
n = u"Tübingen"
repr(n) # `T\xfcbingen` # Unicode
i = 1 # integer
Pierwszy z następujących plików rzuca
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 82: ordinal not in range(128)
Kiedy zrobić n.encode('utf8')
to działa.
Drugi działa bez zarzutu w obu przypadkach.
# Python File 1
#
#!/usr/bin/env python -B
# encoding: utf-8
print '{id}, {name}'.format(id=i, name=n)
# Python File 2
#
#!/usr/bin/env python -B
# encoding: utf-8
print '%i, %s'% (i, n)
Ponieważ w dokumentacji jest zachęcani do korzystania format()
zamiast operatora formacie %
, nie rozumiem dlaczego format()
wydaje się bardziej „handicaped”. Czy format()
działa tylko z utf8
-strings?
Kiedy zrobiłeś "u" {id}, {imię} ". Format (id = i, name = n)" co zaobserwowałeś? Zauważ, że ciąg formatujący to ciąg znaków Unicode "u" ... ". Dodaj to do swoich przykładów i skomentuj to. –
Dziękuję S.Lott, to było to. Teraz rozumiem, gdzie moja wina. '' {id}, {name} ''był łańcuchem utf-8 (zdefiniowanym przez * magic line *' # encoding: utf-8') i 'n' był w unicode. Nie można ich "złączyć". Właśnie dlatego zadziałał 'n.encode ('utf8'). Dobrze? – Aufwind