файл экспорта с правильной кодировкой - PullRequest
8 голосов
/ 08 апреля 2011

Я не понимаю, чего здесь не хватает. Я пытаюсь экспортировать файл в формате csv с расширенными ASCII символами, такими как ÿ или ü, но все, что я получаю, это
Нужно ли указывать что-то еще в ответе?

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();

Ответы [ 3 ]

20 голосов
/ 08 апреля 2011

Я считаю, что вы должны добавить Response.ContentEncoding = Encoding.Unicode, чтобы получить правильный вывод.

    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();
5 голосов
/ 22 декабря 2014

К сожалению Encoding.Unicode не работает, с использованием Windows-1252 работает:

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();
0 голосов
/ 08 апреля 2011

Я программист на Java, вы уверены, что вам нужен StreamReader?Я думаю, StreamReader(stream) может декодировать байты в другой кодировке.И, у вас уже есть байты, может быть, вы могли бы написать байты в ответ непосредственно.

...