Nachdem ich den aktuellen Stundenplan aus dem Studien-Infonetz meiner Universität in den ownCloud Kalender importiert habe, streikten plötzlich meine Synchronisations-Clients (Lightning und die CalDAV-App für Android). Darüber hinaus ist die .ics-Datei, die ich importieren wollte, auch nicht vollständig übernommen worden und es fehlten Termine. Leider half es auch nichts, alle importierten Events wieder zu löschen. Erst das manuelle Entfernen der fehlerhaft importierten Einträge aus der MySQL-Datenbank hat das Problem gelöst.
Schuld war der Zeichensatz: Das iCalendar-Format (.ics) ist ein Textdateiformat – und die Datei hatte den Zeichensatz ISO-8859-15. Der Kalenderimport in ownCloud kann jedoch scheinbar ausschließlich UTF8 verarbeiten, bemerkt den Fehler aber nicht und fügt darauf dutzende ungültige Kalendereinträge ein.
Kalender reparieren
Wer sonst keine Einträge im Kalender hatte kann ihn getrost in ownCloud löschen und einen neuen anlegen. Dann muss zwar der Kalender in den Clients neu konfiguriert werden, aber das geht vergleichsweise schnell, wenn man keine SQL-Kenntnisse hat.
Sollen jedoch andere Termine aus dem Kalender erhalten bleiben, dann hilft es nur die fehlerhaften Zeilen direkt aus der Datenbank zu löschen. Dazu benötigt man zunächst einen Zugang zur Datenbank – wer diese selbst betreibt, sollte wissen wie das geht. Ich empfehle phpMyAdmin. Danach sollte man ownClouds Datenbank auswählen und einen Blick in die Tabelle oc_clndr_objects werfen. Die fehlerhaften Events haben leere Beschreibungen. Am besten sucht man die calendarid der defekten Einträge und lässt sie dann nach id absteigend ordnen (siehe weiter unten). Dann kann man die fehlerhaften Einträge löschen.
Zum Anzeigen der neusten Einträge eines bestimmten Kalenders:
SELECT * FROM oc_clndr_objects WHERE calendarid=<KALENDER_NR> ORDER BY id DESC;
Das Problem vermeiden
Ob eine ics-Datei richtig kodiert ist kann man mit einem einfachen Texteditor (z.B. gedit, notepad) feststellen, indem man sie öffnet und dann erneut speichert. Die meisten Editoren bieten bei der Funktion Speichern unter die Möglichkeit, den Zeichensatz umzustellen. Nach der Umstellung auf UTF8 kann die Datei fehlerfrei importiert werden.
Oder in der Kommandozeile:
iconv -f LATIN9 -t utf-8 termine.ics > termine_utf8.ics
Insbesondere für den Import größerer Kalenderdateien ist es ratsam einfach einen eigenen Kalender anzulegen. Der muss dann zwar separat mit den Clients synchronisiert werden, kann aber im Fehlerfall einfach gelöscht werden. Außerdem ist auch recht praktisch Termine verschiedener Art voneinander zu trennen – z.B. wenn auf dem Arbeitsrechner keine privaten Termine erscheinen sollen.