im试图在此处解析ical:http://www.dsek.se/kalender/ical.php?person=&dsek&第tl次
使用此代码:
URL url=new URL("http://www.dsek.se/kalender/ical.php?person=&dsek&tlth");
calendar=Calendars.load(url);
好吧,这基本上就是日历代码的要点。
但我遇到了问题,我认为不知何故,"描述:文本"变成了"描述:newLine文本",因此我认为解析器无法工作。
问题只出现在描述:后面有空白的行上,看起来像"描述:文本"的行可以正常工作。我还测试了另一个没有这些换行符的文件,该文件运行良好。
所以我猜测这可能是某种字符编码问题?URL对象更改了文件的编码?文件上的字符编码是ISO-8859-15
还是只是他们在"描述:"之后用换行符编写了文件?如果是这种情况,我该如何解决?:S
如果它在某种程度上很重要,该应用程序正在android上运行:)
问题是DESCRIPTION字段没有按照正确的行折叠。看见https://www.rfc-editor.org/rfc/rfc5545#section-3.1
所以无论你在哪里有这样的东西
DESCRIPTION:
some text
你应该改为
DESCRIPTION:
some text
(请注意换行后和文本前的空格)或简单的
DESCRIPTION:some text
你也许可以用一个简单的Regex来解决这个问题。
然后,对于那些长度大于75个字符的描述,文件也缺少行折叠。iCal4j应该可以接受。
最后,关于字符编码,UTF-8是默认的(其他编码实际上不推荐使用https://www.rfc-editor.org/rfc/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文件的作者自己解决这些问题(换行和内容编码)。