我试图在这里解析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上运行:)
答案 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 内容编码)。