Попытка разобрать ical файл с проблемами ical4j с новыми строками после свойства описания

Я пытаюсь разобрать ical здесь: http://www.dsek.se/kalender/ical.php?person=&dsek&tlth

с этим кодом:

URL url=new URL("http://www.dsek.se/kalender/ical.php?person=&dsek&tlth");
calendar=Calendars.load(url);

ну, это в основном суть кода календаря.

Но у меня возникают проблемы, я думаю, что каким-то образом «DEDSCRIPTION: text» преобразуется в «DESCRIPTION: newLine text» перед анализом, и поэтому я думаю, что парсер не будет работать.

Проблема появляется только в строках, где после ОПИСАНИЯ: есть пробел, строки, которые выглядят как «ОПИСАНИЕ: текст», работают нормально. Я также протестировал другой файл, в котором нет этих новых строк, и этот файл работает нормально.

Итак, я предполагаю, что, возможно, это какая-то проблема с кодировкой символов? что объект URL меняет кодировку файла? кодировка символов в файле ISO-8859-15

Или просто они написали файл с новой строкой после "DESCRIPTION:"? И если это так, как мне это решить? :С

если это имеет какое-то значение, приложение работает на Android :)


person Folke    schedule 17.07.2013    source источник


Ответы (1)


Проблема в том, что поле DESCRIPTION не соответствует правильному переносу строк. См. http://tools.ietf.org/html/rfc5545#section-3.1

Поэтому везде, где у вас есть что-то вроде

DESCRIPTION:
some text

вы должны были вместо этого

DESCRIPTION:
 some text

(обратите внимание на пробел после перевода строки и перед текстом) или просто

DESCRIPTION:some text

Возможно, вам удастся обойтись простым регулярным выражением, чтобы исправить это.

Тогда в файле также отсутствует перенос строки для тех ОПИСАНИЙ, которые имеют длину более 75 символов. iCal4j должен с этим справиться.

Наконец, что касается кодировки символов, по умолчанию используется UTF-8 (другие кодировки на самом деле устарели. см. http://tools.ietf.org/html/rfc5545#section-6), поэтому метод Calendars.load() просто предполагает UTF-8.

Итак, вам придется

Reader r = new InputStreamReader(url.openStream(), "ISO-8859-15");
CalendarBuilder builder = new CalendarBuilder();
Calendar calendar = builder.build(r);

Конечно, лучшим решением для авторов этих ics-файлов было бы исправление этих проблем (свертывание строк И кодирование содержимого) на их стороне.

person Arnaud Quillaud    schedule 18.07.2013
comment
(ОПИСАНИЕ: какой-то текст следует заменить на ОПИСАНИЕ: какой-то текст) вы имели в виду, что замена должна быть ОПИСАНИЕ: какой-то тест? :) и мне нужно исправить проблему с перелинковкой строк с более длинными описаниями, или ical4j позаботится об этом за меня? @arnaudq - person Folke; 18.07.2013
comment
Да, load() принимает только UTF-8. Опять же, в первую очередь не следует использовать другие кодировки. Эта практика устарела в RFC5545. - person Arnaud Quillaud; 18.07.2013
comment
Похоже, редактор проглотил текст, заключенный в скобки. Отредактировал и переформулировал мой ответ. Надеюсь, теперь это станет более понятным. ical4j будет принимать длинные описания, поэтому здесь нет необходимости исправлять. - person Arnaud Quillaud; 19.07.2013