将 iCal.net 与 Google 日历一起使用

Using iCal.net with Google Calendar

我在一个用于安排官员的应用程序中用 iCal.Net 替换了 DDay iCal 库。许多官员喜欢在他们的 Google 日历上使用 "add from URL" 添加他们的比赛日历,这样他们就可以在手机上看到他们的日程安排。然而,Google calendar 似乎不喜欢现在正在生成的 .ics 文件。它将正常导入,但尝试按 URL 添加它会导致没有事件显示。我通过 URL 添加 link 与其他客户端(Outlook、O365 等)没有任何问题,并且该文件在文本编辑器中显示正常。

此问题似乎是由 OpenTextFileWriter 方法在默认 ASCII 编码中包含字节顺序标记 (BOM) 引起的。生成此文件的原始代码如下所示:

Dim MySerializer As New CalendarSerializer()
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter(strPath, False)
file.Write(MySerializer.SerializeToString(MyCal))
file.Close()

在 Google 日历和 Apple 的 "Subscribe to this calendar" 工作之前,我必须将生成 ICS 文件的代码更改为以下代码:

Dim MySerializer As New CalendarSerializer()
Dim file As System.IO.StreamWriter
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
file = My.Computer.FileSystem.OpenTextFileWriter(strPath, False, utf8WithoutBom)
file.Write(MySerializer.SerializeToString(MyCal))
file.Close()

有趣的是,Outlook 和 Office 365 对 BOM 并不挑剔,并且在那里运行良好。