Проблемы с кодировкой CSV (Microsoft Excel) - PullRequest
9 голосов
/ 22 августа 2011

Я динамически создаю файлы CSV с использованием C #, и у меня возникают странные проблемы с кодировкой.В настоящее время я использую кодировку ASCII, которая отлично работает в Excel 2010, которую я использую дома и на своей рабочей машине.Однако клиент использует Excel 2007, и для него возникают некоторые странные проблемы с форматированием, а именно то, что знаку «£» (знак британского фунта) предшествует символ «A» с акцентом.

Какую кодировку следует указыватьиспользовать?Раздражает то, что я с трудом могу проверить эти исправления, так как у меня нет доступа к Excel 2007!

Ответы [ 3 ]

14 голосов
/ 22 августа 2011

Я использую кодовую страницу Windows ANSI 1252 без проблем в Excel 2003. Я явно изменил это из-за той же проблемы, что и вы.

private const int WIN_1252_CP = 1252; // Windows ANSI codepage 1252

this._writer = new StreamWriter(fileName, false, Encoding.GetEncoding(WIN_1252_CP));
4 голосов
/ 23 августа 2011

Я успешно использовал кодировку UTF8 при записи файлов CSV, предназначенных для работы с Excel.

Единственной проблемой, с которой я столкнулся, было использование перегрузки конструктора StreamWriter, который принимает кодировку в качестве параметра.Кодировка StreamWriter по умолчанию гласит, что это UTF8, но на самом деле это UTF8-без-байтового порядка-метки, и без спецификации Excel будет путать символы, используя несколько байтов.

0 голосов
/ 06 сентября 2017

Вам необходимо добавить преамбулу в файл:

        var data = Encoding.UTF8.GetBytes(csv);
        var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
        return File(new MemoryStream(result), "application/octet-stream", "file.csv");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...