-1

我在调度官员的应用程序中用 iCal.Net 替换了 DDay iCal 库。许多官员喜欢在他们的谷歌日历上使用“从 URL 添加”添加他们的比赛日历,这样他们就可以在手机上查看他们的日程安排。但是,Google 日历似乎不喜欢现在正在生成的 .ics 文件。它会很好地导入,但尝试通过 URL 添加它会导致没有事件出现。我通过 URL 添加与其他客户端(Outlook、O365 等)的链接没有问题,并且该文件在文本编辑器中显示正常。

4

1 回答 1

1

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

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 的“订阅此日历”起作用之前,我必须将生成 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 并不挑剔,并且在那里运行良好。

于 2018-01-21T23:06:39.553 回答