76

c#(asp.net)でiCalendarファイル(* .ics)を生成するための良い方法を探しています。いくつかのリソースを見つけましたが、不足しているものの1つは、quoted-printableフィールド(キャリッジリターンとラインフィードを持つフィールド)のサポートです。

たとえば、説明フィールドが適切にエンコードされていない場合、最初の行のみが表示され、*。icsファイルの残りの情報が破損する可能性があります。

*.icsファイルを生成できる既存のクラスやquoted-printableフィールドを生成できるクラスを探しています。

4

9 に答える 9

73

私はDDay.Icalを使用しています。icalファイルを開き、そのデータを適切なオブジェクトモデルで取得する機能があります。ベータ版と書いてありますが、私たちにとってはうまく機能します。

2016年11月編集

このライブラリは非推奨になりましたが、別の開発者によってiCal.NETとして取得され、再リリースされました。

リリースに関するメモ:rianjs.net/2016/07/dday-ical-is-now-ical-net

GitHubのソース:github.com/rianjs/ical.net

于 2008-08-14T04:09:48.813 に答える
12

これを行うために私が見つけた最も簡単な方法は、microformatsを使用してHTMLをマークアップすることです。

iCalendarファイルの生成を検討している場合は、hCalendar microformatを使用して、「カレンダーに追加」などのリンクを含めることができます。

http://feeds.technorati.com/events/ [ http://を含むページの完全なURL]

次に、Technoratiページはページを解析し、hCalendar情報を抽出して、iCalendarファイルをクライアントに送信します。

于 2008-08-20T08:02:15.577 に答える
3

これを処理するシム関数を作成しました。ほとんど準拠しています-唯一のハングアップは、最初の行が75文字ではなく74文字であることです(74文字は後続の行のスペースを処理するためです)...

 Private Function RFC2445TextField(ByVal LongText As String) As String

     LongText = LongText.Replace("\", "\\")
     LongText = LongText.Replace(";", "\;")
     LongText = LongText.Replace(",", "\,")

     Dim sBuilder As New StringBuilder
     Dim charArray() As Char = LongText.ToCharArray

     For i = 1 To charArray.Length
         sBuilder.Append(charArray(i - 1))
         If i Mod 74 = 0 Then sBuilder.Append(vbCrLf & " ")
     Next

     Return sBuilder.ToString

 End Function

これは、ICS フィードの概要と説明に使用します。すでにフィールドが追加されている行をフィードするだけです (例: LongText = "SUMMARY:Event Title")。キャッシュを適切に長く設定する限り、操作のコストが高すぎることはありません。

于 2011-01-21T21:15:57.873 に答える
2

iCal (ical 2.0) と quoted-printable は両立しません。

Quoted-printable は、改行 (=0D=0A) などの印刷できない文字を表すために、 vCal (vCal 1.0) でよく使用されます。デフォルトの vCal エンコーディングは 7 ビットであるため、非 ASCII 文字を表すために quoted-printable を使用する必要がある場合があります (デフォルトのエンコーディングをオーバーライドできますが、他の vCal 準拠の通信相手はそれを理解する必要はありません)。

iCalでは、特殊文字は「\n」などのエスケープを使用して表されます。デフォルトのエンコーディングは UTF-8 であり、iCal に準拠するすべての関係者は UTF-8 をサポートする必要があり、iCal 2.0 (さらに言えば vCard 3.0) では quoted-printable が完全に不要になります。

要件を明確にするために、顧客/利害関係者を支持する必要がある場合があります。vCal と iCal は混同されているようです。

于 2009-05-15T19:11:56.157 に答える
1

http://www.codeproject.com/KB/vb/vcalendar.aspxをチェックしてください

あなたが尋ねたように引用された印刷可能なフィールドを処理しませんが、残りのコードはそこにあり、変更できます。

于 2008-08-19T18:51:07.673 に答える
1

RFC-2445 によると、コメントおよび説明フィールドは TEXT です。テスト フィールドの規則は次のとおりです。 [1] TEXT フィールドの 1 行は 75 オクテットを超えてはなりません。[2] ラッピングは、CRLF の後に空白を挿入することによって実現されます。[3] \ (逆スラッシュ) など、エンコードする必要のある文字がいくつかあります。(セミコロン)、(カンマ)、改行。\ (逆スラッシュ) を区切り文字として使用すると、\ \ になります。\, \n

例: 以下は、プロパティ値に書式設定された改行を含むプロパティの例です。

 DESCRIPTION:Meeting to provide technical review for "Phoenix"
   design.\n Happy Face Conference Room. Phoenix design team
   MUST attend this meeting.\n RSVP to team leader.
于 2009-05-15T18:47:52.300 に答える
0

iCal は複雑な場合があるため、ライブラリの使用をお勧めします。DDay は優れた無料のソリューションです。最後に、定期的なイベントを完全にサポートしていないことを確認しましたが、それ以外は非常に良さそうです。複数のクライアントで必ずカレンダーをテストしてください。

于 2008-08-14T06:10:00.863 に答える
0

手遅れであることはわかっていますが、他の人を助けるかもしれません。私の場合、拡張子が.icsの次のテキストファイルを書きました

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Calendly//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20170509T164109Z
UID:your id-11273661
DTSTART:20170509T190000Z
DTEND:20170509T191500Z
CLASS:PRIVATE
DESCRIPTION:Event Name: 15 Minute Meeting\nDate & Time: 03:00pm - 03:15pm (
 Eastern Time - US & Canada) on Tuesday\, May 9\, 2017\n\nBest Phone Number
  To Reach You :: xxxxxxxxx\n\nany "link": https://wwww.yahoo.com\n\n
SUMMARY:15 Minute Meeting
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

それは私のために働いた。

于 2017-05-09T18:19:20.967 に答える