Строка формата в ICS Fle (установить шрифт для файла ICS)

Я создаю файл ICS из приложения C# WPF и использую следующий код для создания файла ICS.

StreamWriter writer;
writer = new StreamWriter(filePath);
writer.WriteLine("BEGIN:VCALENDAR");
writer.WriteLine("VERSION:2.0");
writer.WriteLine("PRODID:MyApp");
writer.WriteLine("CALSCALE:GREGORIAN");
writer.WriteLine("METHOD:PUBLISH");
writer.WriteLine("BEGIN:VEVENT");
string startDateTime = Convert.ToDateTime(appointmentDetails.StartDate).ToString("yyyyMMdd'T'HHmmss");
string endDateTime = Convert.ToDateTime(appointmentDetails.EndDate).ToString("yyyyMMdd'T'HHmmss");

writer.WriteLine("DTSTART:" + startDateTime);
writer.WriteLine("DTEND:" + endDateTime);
writer.WriteLine(@"DESCRIPTION:" + appointmentDetails.Body);
writer.WriteLine("SUMMARY:" + appointmentDetails.Subject);
writer.WriteLine("END:VEVENT");
writer.WriteLine("END:VCALENDAR");
writer.Close();

Но у меня есть некоторые проблемы с описанием. Я думаю, что когда я добавляю \n для новой строки, это создает проблему. Мне нужно отформатировать мою строку следующим образом.

------------------
Header1
-----------------
bOdy1
contents
---------------

Я использую следующую строку для создания пунктирной линии.

result += new String('-', characterLength) + "\\n";

Но на выходе отображается одна строка вместо пунктирной. Я думаю, что «\ n» создает проблему. Когда я добавляю пробел после escape-символа новой строки, я вижу, что проблема решена. Есть ли лучшее/альтернативное решение для этого?

Некоторая строка в описании отображается другим стилем шрифта. Как сделать ее уникальной?

Как я могу установить шрифт для этого файла ICs из С#?

Пожалуйста, предложите.


person Roshil K    schedule 15.05.2013    source источник
comment
Вы пробовали Environment.NewLine вместо \\n?   -  person Viv    schedule 15.05.2013
comment
Да, я пытался. Но когда я использовал Environment.NewLine, строка после этого кода Environment.NewLine исчезла на дисплее. Поэтому я использовал \n вместо Environment.NewLine   -  person Roshil K    schedule 15.05.2013


Ответы (2)


Во-первых: вам следует попытаться найти библиотеку iCalendar, а не писать ее самостоятельно. Формат очень сложный, и, вероятно, вы упускаете много мелочей.

Каждая строка должна быть не более 75 байт. Если строка не помещается (потому что она больше), вы можете разделить строку, вставив настоящую новую строку (\r\n), за которой следует пробел или табуляция.

Читатель iCalendar просто удалит любые \r\n[space] или \r\n\t.

Однако вы должны убедиться, что не сломаете файл в середине многобайтовой последовательности UTF-8.

Значение для описания должно быть закодировано следующим образом:

  • ; должно стать \;
  • , должно стать \,
  • Любая новая строка должна стать буквальной \n или \N

Это помогает? Если нет, опубликуйте полный вывод, если ваш поток iCalendar, чтобы я мог сказать вам, где вы допустили ошибку.

person Evert    schedule 18.05.2013

Описание формата...

    str.AppendLine(String.Format("DESCRIPTION:{0}", description));
    str.AppendLine(String.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", description));
person Chinh Vo Wili    schedule 05.06.2017