. Net HttpResponseMessage csv Файл со специальными символами, которые можно открыть в Excel. - PullRequest
0 голосов
/ 05 августа 2020

Мое приложение - это. net WebAPI (C#, без MVC), который, помимо прочего, должен содержать некоторые файлы csv, содержимое которых также может включать нестандартные символы (например, греческие буквы).

Я попытался найти решение для SO, но большинство ответов было связано с использованием метода File базового класса mvc контроллера (к которому у меня нет доступа).

Показан мой текущий код ниже (я даже удалил часть File.ReadAllText, чтобы проверить, может ли он просто вернуть простой текст Hello World).

private HttpResponseMessage GetFile(string fileName)
{
    var response = new HttpResponseMessage();
    try
    {
        response.Content = new StringContent("Γειά σου Κόσμε");
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileName + ".csv" };
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
    }
    catch (Exception) { response.Content = new StringContent("File does not exist"); }
    return response;
}

Я также пробовал использовать response.Content.Headers.ContentEncoding.Add(Encoding.UTF8.BodyName);

Некоторые странные взаимодействия:

Если я загружаю файл и открываю его с помощью Excel, он просто читает gibberi sh, если я открываю с помощью блокнота ++, текст читается нормально. В нем также указано, что кодировка - utf8, если я изменю ее на спецификацию utf-8 и сохраню файл, excel может его прочитать.

Если я просто переместу файл с сервера на свой компьютер, Excel имеет нет проблем с прочтением.

1 Ответ

0 голосов
/ 05 августа 2020

Кажется, я упустил из виду вопрос. Речь шла о проекте MVC, но ответ все еще применяется.

Мне просто пришлось изменить его на:

var content = Encoding.UTF8.GetBytes(File.ReadAllText(pathName));
response.Content = new ByteArrayContent(Encoding.UTF8.GetPreamble().Concat(content).ToArray());

Кажется, мне не хватало символов которые должны появляться в начале файлов utf8bom.

...