export file with correct encoding
32,295
Solution 1
I believe you should add Response.ContentEncoding = Encoding.Unicode
to get right output.
Encoding encoding = Encoding.UTF8;
var bytes = encoding.GetBytes("write ÿ or ü please");
MemoryStream stream = new MemoryStream(bytes);
StreamReader reader = new StreamReader(stream);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.csv", "filename"));
Response.Charset = encoding.EncodingName;
Response.ContentType = "application/text";
Response.ContentEncoding = Encoding.Unicode;
Response.Output.Write(reader.ReadToEnd());
Response.Flush();
Response.End();
Solution 2
Unfortunately Encoding.Unicode
didn't work, using Windows-1252
worked :
Response.Clear();
Response.ContentType = "Application/x-msexcel";
Response.AddHeader("content-disposition", "attachment; filename=\"filename.csv\"");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("Windows-1252");
Response.Write(string.Join(Environment.NewLine, myDataLines));
Response.End();
Related videos on Youtube
Author by
kiev
Updated on February 22, 2020Comments
-
kiev about 4 years
I don't understand what is missing here. I am trying to export a file in csv format with extended
ASCII
characters likeÿ
orü
but all i get is �
Do I need to specify something else in the response?Encoding encoding = Encoding.UTF8; //ToCSV writes the string correctly var bytes = encoding.GetBytes("write ÿ or ü please"); MemoryStream stream = new MemoryStream(bytes); StreamReader reader = new StreamReader(stream); //TextWriter tw = new TextWriter(); Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.csv", fileName)); Response.Charset = encoding.EncodingName; Response.ContentType = "application/text"; Response.Output.Write(reader.ReadToEnd()); Response.Flush(); Response.End();
-
kiev about 13 yearsIt was actually specifying the charset by Response.Charset = encoding.BodyName;
-
kiev about 13 yearsMaybe there is, but I am not sure how to do that. I will give it a try.
-
SergeyT about 9 years
encoding.WebName
should be used here. BodyName gives incorrect value for some encodings. For example, "koi8-r" for "windows-1251" encoding.