76 votes

Création de fichiers iCal en c#

Je suis à la recherche d'une bonne méthode pour générer un fichier iCalendar (*.ics) en c# (asp.net). J'ai trouvé quelques ressources, mais l'une d'entre elles ne prend pas en charge les éléments suivants quoted-printable champs - champs qui comportent des retours de chariot et des sauts de ligne.

Par exemple, si le description n'est pas encodé correctement, seule la première ligne s'affichera, ce qui risque de corrompre le reste des informations du fichier *.ics.

Je suis à la recherche de classes existantes qui peuvent générer des fichiers *.ics et/ou une classe qui peut générer quoted-printable champs.

73voto

DevelopingChris Points 12510

J'utilise DDay.Ical c'est une bonne chose. Il a la capacité d'ouvrir un fichier ical et d'obtenir ses données dans un joli modèle objet. C'est écrit beta, mais ça marche très bien pour nous.

Edit Nov 2016

Cette bibliothèque a été dépréciée, mais a été reprise et rééditée sous le nom de iCal.NET par un autre développeur.

Notes sur la version : rianjs.net/2016/07/jour-ical-est-maintenant-ical-net

Source sur GitHub : github.com/rianjs/ical.net

12voto

Ian Oxley Points 5659

Le moyen le plus simple que j'ai trouvé pour faire cela est de baliser votre HTML en utilisant microformats .

Si vous cherchez à générer des fichiers iCalendar, vous pouvez utiliser la méthode suivante microformat hCalendar puis inclure un lien tel que "Ajouter au calendrier" qui pointe vers :

[http://feeds.technorati.com/events/\[](http://feeds.technorati.com/events/[) l'URL complet de votre page, y compris le http:// ]

La page Technorati analyse alors votre page, extrait les informations hCalendar et envoie le fichier iCalendar au client.

3voto

andrew Points 103

J'ai écrit une fonction de cale pour gérer cela. Elle est en grande partie conforme - le seul problème est que la première ligne comporte 74 caractères au lieu de 75 (le 74 sert à gérer l'espace sur les lignes suivantes)...

 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

Je l'utilise pour le résumé et la description de notre flux ICS. Il suffit d'alimenter la ligne avec le champ déjà ajouté au préalable (par exemple LongText = "SUMMARY:Event Title"). Tant que vous réglez la mise en cache sur une durée raisonnable, l'opération n'est pas trop coûteuse.

2voto

azheglov Points 3548

iCal (ical 2.0) et quoted-printable ne vont pas ensemble.

Quoted-printable est beaucoup utilisé dans vCal (vCal 1.0) pour représenter les caractères non imprimables, par exemple les sauts de ligne (=0D=0A). L'encodage vCal par défaut est de 7 bits, il est donc parfois nécessaire d'utiliser quoted-printable pour représenter les caractères non ASCII (vous pouvez remplacer l'encodage par défaut, mais l'autre partie communicante conforme à vCal n'est pas tenue de le comprendre).

Sur iCal les caractères spéciaux sont représentés à l'aide d'échappements, par exemple ''. \n '. Le codage par défaut est UTF-8, toutes les parties compatibles avec iCal doivent le prendre en charge et cela rend quoted-printable complètement inutile dans iCal 2.0 (et vCard 3.0, d'ailleurs).

Vous devrez peut-être revenir à votre client/partenaire pour clarifier les exigences. Il semble y avoir une confusion entre vCal et iCal.

1voto

slolife Points 6528

Vérifiez http://www.codeproject.com/KB/vb/vcalendar.aspx

Il ne gère pas les champs quoted-printable comme vous l'avez demandé, mais le reste du code est là et peut être modifié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X