Проблемы с кодировкой символов при отправке или скачивании CSV-файла в хранилище BLOB-объектов Azure с использованием C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с кодировкой символов при отправке или скачивании CSV-файла в хранилище BLOB-объектов Azure с использованием C#

Сообщение Anonymous »

У меня есть служба, которая позволяет пользователям загружать и скачивать файлы CSV для обновления данных в системе с помощью C#. Эти данные содержат иностранные символы. Кажется, файл загружается нормально. Если я загружаю и просматриваю его непосредственно из Azure Storage Explorer, вся кодировка верна. Однако при попытке загрузки с помощью службы C# французские и немецкие символы заменяются на �.
Вы можете видеть файлы в том виде, в котором они находятся, в Обозревателе хранилища. Похоже, у них правильный тип контента.
Изображение

Мои функции загрузки и скачивания следующие:

Код: Выделить всё

public async Task CreateCSV(string reference, IEnumerable data)
{
using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(data);

await SaveToBlobStorage(reference, Encoding.UTF8.GetBytes(writer.ToString()));
}
}

public async Task SaveToBlobStorage(string filePath, byte[] data)
{
BlobContainerClient container = new BlobContainerClient(Helpers.StorageConnection(), Helpers.ContainerName());

var blob = container.GetBlobClient(filePath);

using (var stream = new MemoryStream(data, writable: false))
{
blob.Upload(stream);
var type = MimeTypesMap.GetMimeType(filePath);
await blob.SetHttpHeadersAsync(new BlobHttpHeaders { ContentType = $"{type}; charset=utf-8" });
}
}

Код: Выделить всё

public async Task GetCSV(string reference)
{
var stream = await GetStreamFromStorage(reference);

stream.Seek(0, SeekOrigin.Begin);

using var reader = new StreamReader(stream, Encoding.UTF8);

using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);

csv.Configuration.Delimiter = ",";
csv.Configuration.HeaderValidated = null;
csv.Configuration.MissingFieldFound = null;

IEnumerable result = csv.GetRecords();

return result.ToList();
}

public async Task GetStreamFromStorage(string file)
{
var blobClient = new BlockBlobClient(Helpers.StorageConnection(), Helpers.ContainerName(), file);

var memoryStream = new MemoryStream();

await blobClient.DownloadToAsync(memoryStream);

return memoryStream;
}
Как вернуть CSV-файлы с правильной кодировкой?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -blob-stor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»