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);

まあ、それは基本的にカレンダーコードの要点です。

しかし、問題が発生しています。解析される前に「DEDSCRIPTION: text」が「DESCRIPTION: newLine text」に変換されるため、パーサーが機能しないと思います。

この問題は、DESCRIPTION:text のような行が正常に機能する、DESCRIPTION: の後に空白がある行でのみ発生します。これらの改行を持たない別のファイルもテストしましたが、そのファイルは正常に動作します。

それで、おそらくそれはある種の文字エンコーディングの問題だと思いますか?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を参照してください) 。 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 に答える