gpt4 book ai didi

c++ - iCal - TimeZone TZID 参数可以包含 ":"字符吗?

转载 作者:行者123 更新时间:2023-11-30 05:11:00 26 4
gpt4 key购买 nike

在一个 C++ 项目中,我正在编写一个解析器来读取和写入 .ics 文件。为此,我针对来自多个来源(gmail、yahoo 等)的具有最大可能情况的多个文件测试了我的解析器。最近在一个测试文档中发现了一个让我有点困惑的情况,一直找不到满意的答案。

我的一个测试文件未能被我的解析器导入。导致问题的 VEVENT 包含以下开始日期:

DTSTART;TZID=GMT+04:00:20120103T120000

此事件与 VTIMEZONE 匹配,声明其 TZID 参数如下:

TZID:GMT+04:00

据我所知,应该将“:”字符用作分隔符,我怀疑上述示例中的 VTIMEZONE 本身格式不正确,但我没有找到任何文档明确指出这种情况永远不会发生。我还注意到 Thunderbird 等几个应用程序也无法导入此文件,显然是出于同样的原因。

所以我的问题是:VTIMEZONE 中的 TZID 参数可以包含“:”字符吗?

此外,我不知道我是否应该使用 TZID 内容作为从 DTSTART 参数中提取 ISO 日期的 key ,或者我是否应该简单地拒绝此类事件,将其标记为已损坏并显示错误消息导入后?

最佳答案

这方面的权威是 RFC5545 和相关小节: RFC5545 3.2.19. Time Zone Identifier

tzidparam = "TZID" "=" [tzidprefix] paramtext

RFC5545 3.1. Content Lines

param = param-name "=" param-value *("," param-value)
param-value = paramtext / quoted-string
paramtext = *SAFE-CHAR
[..]
SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E
/ NON-US-ASCII
; Any character except CONTROL, DQUOTE, ";", ":", ","

从中我们可以得出结论,时区 ID 参数不能包含“:”字符。

关于c++ - iCal - TimeZone TZID 参数可以包含 ":"字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45337694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com