14

Вопрос по response.write, response, encoding, asp.net – Как добавить информацию о кодировке в поток ответов в ASP.NET?

У меня есть следующий кусок кода:

public void ProcessRequest (HttpContext context) 
{
    context.Response.ContentType = "text/rtf; charset=UTF-8";
    context.Response.Charset = "UTF-8";
    context.Response.ContentEncoding = System.Text.Encoding.UTF8;
    context.Response.AddHeader("Content-disposition", "attachment;filename=lista_obecnosci.csv");
    context.Response.Write("ąęćżźń󳥌ŻŹĆŃŁÓĘ");
}

Когда я пытаюсь открыть сгенерированный CSV-файл, я получаю следующее поведение:

  • In Notepad2 - everything is fine.
  • In Word - conversion wizard opens and asks to convert the text. It suggest UTF-8, which is somehow ok.
  • In Excel - I get real mess. None of those Polish characters can be displayed.

Я хотел написать эти специальные символы кодирования перед моей строкой, т.е.

context.Response.Write((char)0xef);
context.Response.Write((char)0xbb);
context.Response.Write((char)0xbf);

но это не принесет пользы. Поток ответов обрабатывает эти данные как обычные данные и преобразует их в нечто иное.

Я буду признателен за помощь в этом.

  • большое спасибо! это именно то, что я искал. цель дескрипторов aphx состоит в том, чтобы просто создать дружественный список, и это делает свое дело!

    от Greg
  • Спасибо! сэкономил много времени для меня!

    от
  • это наиболее полезный ответ, поскольку каждая система кодирования и порядка байтов имеет различную преамбулу, и это относится к другим кодировкам.

    от
  • Необходимо убедиться, что то, что слева, рассматривается как символ, а не как строка. Посмотри пожалуйстаstackoverflow.com/a/19522767/251674

    от
  • Интересно, это примерно так же, как то, что происходит в ответе Алана Мура?

    от
  • Можете ли вы объяснить этот синтаксис? Я не знаком с этим

    от
  • 1

    Ответ от переведено на VB: Context.Response.Write(""c)

    Ответ отАлан Мур переведено на VB:

    Context.Response.Write(""c)
    

  • 17

    Я столкнулся с той же проблемой, и это было мое решение:

    context.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
    context.Response.Write("ąęćżźń󳥌ŻŹĆŃŁÓĘ");
    

  • 23

    То

    что вы называете «информация о кодировке» на самом деле спецификация. Я подозреваю, что каждый из этих "персонажей" кодируется отдельно. Чтобы написать спецификацию вручную, вы должны написать ее как триbytes, а не три символа. Я не знаком с классами ввода / вывода .NET, но вам должен быть доступен метод, который принимает параметр byte или byte [] и записывает их непосредственно в файл.

    Кстати, спецификация UTF-8 не является обязательной; на самом деле, его использование не поощряется консорциумом Unicode. Если у вас нет особой причины для его использования, избавьте себя от хлопот и оставьте это без внимания.

    РЕДАКТИРОВАТЬ: Я только что вспомнил, что вы также можете написать фактическую спецификациюcharacter, '\uFEFF'и пусть кодировщик справится с этим:

    context.Response.Write('\uFEFF');
    

  • 2

    Я думаю, что проблема с Excel на основе

    Microsoft Excel исправляет диакритические знаки в файлах .csv, Чтобы доказать это, скопируйте пример строки выводаąęćżźń󳥌ŻŹĆŃŁÓĘ и вставьте в тестовый файл, используя ваш любимый редактор, и сохраните как файл .csv в кодировке UTF-8. Откройте в Excel и увидите те же проблемы.