Hej, Något kul med encoding; hittade en tråd som kan vara intressant: http://www.dotnet247.com/247reference/msgs/43/217592.aspx OK Cool Cat!File Download med Response.BinaryWrite
Laddar ner en kalenderfil till Outlook genom response.binarywrite, men kan inte få encodingen att visa svenska tecken inuti filen.
<code>
string FileSessionId = objCal.CreateICS(EventCalendar.SelectedDate);
string FilePath = Server.MapPath("/events/ics/" + FileSessionId + ".ics");
// Skicka kalenderfilen till besökaren
FileStream objFS = new FileStream(FilePath, FileMode.Open);
long FileSize = objFS.Length;
byte[] Buffer = new byte[(int)FileSize];
objFS.Read(Buffer, 0, (int)objFS.Length);
objFS.Close();
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", "filename=" + FileSessionId + ".ics");
Response.BinaryWrite(Buffer);
</code>
Kalenderfilen ser ut så här i ren text:
<code>
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
DTSTART:20051102T230000Z
DTEND:20051103T200000Z
LOCATION;ENCODING=QUOTED-PRINTABLE:Sverige
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Hej hej
SUMMARY;ENCODING=QUOTED-PRINTABLE:Här kommer ett event
TRIGGER:-PT15M
PRIORITY:3
END:VEVENT
END:VCALENDAR
</code>
Om man tittar i kalenderfilen ser man att det finns svenska tecken i "Här", men dessa visas som ä när man visar den i Outlook.
Någon som vet hur man sätter rätt encoding för detta?Sv: File Download med Response.BinaryWrite
Sv:File Download med Response.BinaryWrite
Lyckades fixa det. Problemet låg ju inte i hur jag skickade filen utan hur jag skapade den.
Funktionen för att skapa filen:
Nyckelraden är "TextWriter tw = new StreamWriter(FilePath, false, Encoding.Default);"
// SKAPA EN KALENDERFIL OCH SKICKA TILL BESÖKAREN ///////////////////////////////////////////////
// Returnerar en sträng med det unika filnamnet
public string CreateICS(DateTime SelectedDate)
{
string subject = "";
string summary = "";
string startDate = "";
string startTime = "";
string endTime = "";
string location = "";
// Hämta data
DataSet objDS = DSGetEventByDate(SelectedDate.ToShortDateString().ToString());
DataRowCollection objRow = objDS.Tables[0].Rows;
if (objRow.Count != 0)
{
foreach (DataRow drRow in objRow)
{
subject = drRow["Header"].ToString();
summary = drRow["Bodytext"].ToString();
startDate = drRow["EventDate"].ToString();
startTime = drRow["EventStart"].ToString();
endTime = drRow["EventEnd"].ToString();
location = drRow["EventLocation"].ToString();
}
}
const string c_strTimeFormat = "yyyyMMdd\\THHmmss\\Z";
string strStartTime = "";
string strEndTime = "";
string strTimeStamp = "";
string strTempStartTime = "";
string strTempEndTime = "";
string vCalendarFile = "";
// Definera VCalendar format
const string VCAL_FILE =
"BEGIN:VCALENDAR\n" +
"VERSION:1.0\n" +
"BEGIN:VEVENT\n" +
"DTSTART{0}\n" +
"DTEND{1}\n" +
"LOCATION;ENCODING=QUOTED-PRINTABLE:{2}\n" +
"DESCRIPTION;ENCODING=QUOTED-PRINTABLE:{3}\n" +
"SUMMARY;ENCODING=QUOTED-PRINTABLE:{4}\n" +
"TRIGGER:-PT15M\n" +
"PRIORITY:3\n" +
"END:VEVENT\n" +
"END:VCALENDAR";
// Formatera innehållet rätt
DateTime dtmStartDate = DateTime.Parse(startDate.ToString());
DateTime dtmStartTime = DateTime.Parse(startDate.Substring(0, 10) + " " + startTime.ToString());
DateTime dtmEndTime = DateTime.Parse(startDate.Substring(0, 10) + " " + endTime.ToString());
strTempStartTime = string.Format("{0} {1}", dtmStartDate.ToShortDateString(), dtmStartTime.ToLongTimeString());
strTempEndTime = string.Format("{0} {1}", dtmStartDate.ToShortDateString(), dtmEndTime.ToLongTimeString());
strTimeStamp = (DateTime.Parse(strTempStartTime)).ToUniversalTime().ToString(c_strTimeFormat);
strStartTime = string.Format(":{0}", strTimeStamp);
strEndTime = string.Format(":{0}", (DateTime.Parse(strTempEndTime)).ToUniversalTime().ToString(c_strTimeFormat));
// Definera kalenderinnehållet
vCalendarFile = String.Format(VCAL_FILE, strStartTime, strEndTime, location, summary, subject, strTimeStamp, "Text här");
// Instansiera texstrean objektet
string FilePath = Server.MapPath("/events/ics/" + Session.SessionID.ToString() + ".ics");
TextWriter tw = new StreamWriter(FilePath, false, Encoding.Default);
// Skriv innehållet till filen
tw.WriteLine(vCalendarFile.ToString());
// Stäng filen
tw.Close();
return Session.SessionID.ToString();
}
Och så här anropar jag funktionen:
// Skicka kalenderfil till besökaren //////////////////////////////////////////////////
public void GetCalendarFile(Object sender, EventArgs e)
{
CalendarClass objCal = new CalendarClass();
string strStartDate;
string strStartTime;
string strEndTime;
string strHeader;
string strSummary;
string strLocation;
string strOrganizerMail;
// Skapa kalenderfilen
string FileSessionId = objCal.CreateICS(EventCalendar.SelectedDate);
string FilePath = Server.MapPath("/events/ics/" + FileSessionId + ".ics");
Response.Clear();
Response.ContentType = "text/plain";
Response.ContentEncoding = Encoding.UTF8;
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileSessionId + ".ics");
Response.WriteFile(FilePath);
Response.Flush();
Response.Close();
// Ta bort filen
FileInfo objFI = new FileInfo(FilePath);
objFI.Delete();
}