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.
In [1]: import calendar
In [2]: cal = calendar.HTMLCalendar()
In [3]: with open('test.html', 'w') as f:
...: f.write(cal.formatyear(2009, 8))
...:
...:
In [4]: cal = calendar.LocaleHTMLCalendar()
In [5]: with open('test.html', 'w') as f:
f.write(cal.formatyear(2009, 8))
...:
...:
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
/home/sebastian/<ipython console> in <module>()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 2588: ordinal not in range(128)
Letzteres nutzt als Locale bei mir Deutsch und wird wahrscheinlich mit dem März nicht klarkommen. Sollte man dieses Verhalten als gewollt ansehen oder ist das ein Fehler?
IMHO gewollt. Der Fehler tritt ja nicht beim erstellen auf, da ``unicode`` Objekte benutzt werden, sondern beim Schreiben.
Da in Python2.x das Standardencoding ASCII ist, krachts natuerlich.
Bleibt nur ``codecs.open`` oder ein explizites Kodieren
Das ist kein Fehler. Die Dokumentation sagt zu `calendar.LocaleHTMLCalendar`: "If this locale includes an encoding all strings containing month and weekday names will be returned as unicode." Du bekommst also Unicode zurück und musst dich beim Speichern in die Datei dann selber um das Enkodieren kümmern.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
from calendar import LocaleHTMLCalendar, TimeEncoding
import codecs
class MyHTMLCalendar(LocaleHTMLCalendar):
def write(self, s, filename='calendar.html'):
with TimeEncoding(self.locale) as encoding:
with codecs.open(filename, 'w', encoding) as f:
f.write(s)
def test():
cal = MyHTMLCalendar()
cal.write(cal.formatyear(2009))