0

我试图在这里解析 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);

好吧,这基本上是日历代码的要点。

但是我遇到了问题,我认为“DESCRIPTION:text”在被解析之前会以某种方式转换为“DESCRIPTION:newLine text”,因此我认为解析器将无法工作。

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

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

还是只是他们在“DESCRIPTION:”之后用换行符编写了文件?如果是这种情况,我该如何解决?:S

如果它在某种程度上很重要,该应用程序在 android 上运行 :)

4

1 回答 1

1

问题是DESCRIPTION字段没有遵循正确的行折叠。见https://www.rfc-editor.org/rfc/rfc5545#section-3.1

所以无论你有什么像

DESCRIPTION:
some text

你应该有

DESCRIPTION:
 some text

(请注意换行后和文本前的空格)或干脆

DESCRIPTION:some text

你也许可以用一个简单的正则表达式来解决这个问题。

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

于 2013-07-18T08:11:59.313 回答