RFC5545 ------- https://www.rfc-editor.org/rfc/rfc5545 The iCalendar object is organized into individual lines of text, called content lines. Content lines are delimited by a line break, which is a CRLF sequence (CR character followed by LF character). Lines of text SHOULD NOT be longer than 75 octets, excluding the line break. Long content lines SHOULD be split into a multiple line representations using a line "folding" technique. That is, a long line can be split between any two characters by inserting a CRLF immediately followed by a single linear white-space character (i.e., SPACE or HTAB). Any sequence of CRLF followed immediately by a single linear white-space character is ignored (i.e., removed) when processing the content type. For example, the line: DESCRIPTION:This is a long description that exists on a long line. Can be represented as: DESCRIPTION:This is a lo ng description that exists on a long line. The process of moving from this folded multiple-line representation to its single-line representation is called "unfolding". Unfolding is accomplished by removing the CRLF and the linear white-space character that immediately follows. When parsing a content line, folded lines MUST first be unfolded according to the unfolding procedure described above. -------------------------------------------------------------------------------- Observation of different ics files from different sources --------------------------------------------------------- ICS files from Microsoft Outlook differ from those that were created by Gnome Evolution. The order of "fields" seems not be standardized and differs between every application. Evolution --------- all line endings are \r\n all day event: DTSTART;VALUE=DATE:20230908 DTEND;VALUE=DATE:20230909 an all day event can span over multiple days and look like this: DTSTART;VALUE=DATE:20230911^M$ DTEND;VALUE=DATE:20230916^M$ The DTEND of an all day event is exclusively, it is not an all day event anymore! appointment: DTSTART;TZID=/freeassociation.sourceforge.net/Continent/City: 20230909T090000 DTEND;TZID=/freeassociation.sourceforge.net/Continent/City: 20230909T093000 appointments can also span over multiple days: DTSTART;TZID=/freeassociation.sourceforge.net/Europe/Berlin: 20230913T230000 DTEND;TZID=/freeassociation.sourceforge.net/Europe/Berlin: 20230914T040000 SEQUENCE is the number of times the event was modified. Evolution sets this to 2 after it has been generated. Appointments include the continent and city of the used time zone. "DESCRIPTION:" is an optional field.