问题描述
如果通过nextcloud Ui创建事件,则Caldav服务器响应如下所示(输出缩短):
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
BEGIN:VTIMEZONE
TZID:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
SUMMARY:Test
.....
CATEGORIES:Jg. 5 <-- // here
CATEGORIES:Jg. 6 <-- // here
....
END:VEVENT
END:VCALENDAR
如果事件是在Thunderbird中创建的,则它看起来像这样(输出缩短):
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20200813T111910Z
LAST-MODIFIED:20200817T084432Z
DTSTAMP:20200817T084432Z
UID:584589d3-54a6-4f5a-bd4c-03e478938b07
SUMMARY:Test
CATEGORIES:Jg. 5,Jg. 6 <-- // here
....
END:VEVENT
END:VCALENDAR
如您所见,Nextcloud为每个类别创建自己的字段,而Thunderbird用逗号(,)分隔每个类别。
这是对的吗
解决方法
根据rfc 5545 section 3.8.1.2,CATEGORIES
属性可以具有多个逗号分隔的值。这就是雷鸟所做的。
同时,允许多次指定多个rfc 5545属性,例如ATTENDEE
。因此,解析器已学会处理多种属性。从rfc 7986 section 5.6看,CATEGORIES
的多个属性被明确允许。
某些解析器可能会在内部将多个CATEGORIES
属性转换为单个属性(反之亦然?),这在编辑事件时会很明显。