【发布时间】:2012-10-14 20:27:08
【问题描述】:
我正在使用 C# 创建一个简单的 iCalendar,发现 RFC 2445 第 4.1 节的内容折叠非常令人头疼(对我来说 :-)。
http://www.apps.ietf.org/rfc/rfc2445.html#sec-4.1
对于长行,您要转义一些字符(我相信反斜杠、分号、逗号和换行符),然后将其折叠,使行长度不超过 75 个八位字节。我在网上找到了几种直接的方法。最简单的方法是用转义版本替换有问题的字符,然后在每 75 个字符处插入 CRLF。比如:
// too simple, could break at an escape sequence boundary or multi-byte character may overflow 75 octets
txt = txt.Replace(@"\", "\\\\").Replace(";", "\\;").Replace(",", "\\,").Replace("\r\n", "\\n");
var regex = new System.Text.RegularExpressions.Regex( ".{75}");
var escape_and_folded = regex.Replace( txt, "$0\r\n ");
我看到两个问题。 CRLF 可能被插入到转义序列中。例如,如果插入发生使得转义的新行序列“\n”变为“\CRLF”(那么“n”将在下一行)。第二个问题是当有多字节字符时。由于计算是按字符计算的,因此该行可能会超过 75 个八位字节。
一个简单的解决方案是逐个字符地遍历字符串并转义和折叠,但这似乎相当暴力。有人有更优雅的解决方案吗?
【问题讨论】:
-
stackoverflow.com/q/10658/1167333 解决了您的问题吗?
标签: c# string icalendar rfc5545 rfc2445