尝试使用描述属性后的换行符解决ical4j问题的ical文件

时间:2013-07-17 00:04:06

标签: java android calendar 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“在解析之前,因此我认为解析器不会工作。

问题只出现在描述后面的行:有一个空格,看起来像“DESCRIPTION:text”的行工作正常。我还测试了另一个没有这些换行符的文件,该文件工作正常。

所以我猜这可能是某种字符编码问题? URL对象改变了文件的编码?文件上的字符编码是ISO-8859-15

或者仅仅是他们在“DESCRIPTION:”之后用换行符编写了文件?如果是这样的话,我该如何解决这个问题呢? :S

如果以某种方式重要的是应用程序在android上运行:)

1 个答案:

答案 0 :(得分:1)

问题是DESCRIPTION字段没有遵循正确的折叠方式。见http://tools.ietf.org/html/rfc5545#section-3.1

所以只要你有像

那样的地方
DESCRIPTION:
some text

你应该有

DESCRIPTION:
 some text

(请注意换行后和文本前的空格)或简单地

DESCRIPTION:some text

你可以通过一个简单的Regex来解决这个问题。

然后,对于长度大于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文件的作者解决这些问题(折叠 AND 内容编码)。