当前位置:  开发笔记 > 编程语言 > 正文

在iCal文件中编码换行符

如何解决《在iCal文件中编码换行符》经验,为你挑选了4个好方法。

我正在试图弄清楚如何在iCal文件的DESCRIPTION部分中编码换行符,以便它们可以正确导入Outlook,Google日历和Apple日历.

我继承的原始代码使用带有引用可打印编码的"= 0D = 0A",这在Outlook中很有用,但在Google日历中却不行.

规范似乎说你应该使用"\n"来表示换行符.这在Google日历中效果很好,但Outlook只会在其中放置文字"\n"字符.

有没有一种方法可以在日历系统中始终如一地工作?



1> Eric Petroel..:

好吧,看起来我正在回答我自己的问题.

正确的方法是使用"\n"来换行.Outlook没有认识到这一点,因为我在描述中有"ENCODING = quoted-printable".删除后,Outlook正确显示了新行.

此外,要在Apple iCal中正确打开文件,您需要使用"VERSION:2.0"作为文件版本.如果你使用"VERSION:1.0",它会告诉你它无法读取文件(即使它符合1.0规范).

注意:正如其他人所提到的,文件实际上必须包含文字字符串\n.由于大多数语言将其视为表示换行符的转义序列,因此您可能需要\\n在代码中使用该字符串.


对于添加了\ n来创建新行但仍然无效的任何人,我最终使用了\\ n,如@periklis所述

2> periklis..:

上面原帖中Matthew Bucket链接到RFC的评论帮助了我.引自那里:

"TEXT"属性值中的BACKSLASH字符必须使用另一个BACKSLASH字符进行转义

所以,我做了一个

$description = str_replace("\r\n", "\\n", $description);

它起作用了


这非常奇怪地看到`\\n`并且几乎无法理解.在.NET领域,我创建了`const string textLineFeed = @"\"+"n";`

3> 小智..:

可能值得说你需要文字\n,而不是换行符号,字面上反斜杠然后在ical中.另外别忘了75字符"折叠".



4> 小智..:

你的输出文件应该如下---

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//2013//#Ur Site Name#//EN
BEGIN:VEVENT
UID:[event]2012
DTSTART:20130101T100000
DTEND:20130101T120000
LOCATION:
SUMMARY:#Meeting Title here#
DESCRIPTION:What is realistic for financial services companies to achieve via Social Media channels?    \n\nJoin us on 11th September 2013 at 4pm (BST) where we 
-----bla bla bla ----
END:VEVENT
END:VCALENDAR

在这里你必须处理版本,它应该是2.0和Escape char ... \n(换行符),分号(;)和逗号(,).如果你在.net上写,那么它应该......"\\n","\\;" 和"\\,".

您也可以在此网站上查看输出文件... http://icalvalid.cloudapp.net/

谢谢,巴斯卡

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有