środa, 4 czerwca 2014

Polskie znaki w pliku CSV, epizod drugi

W poprzednim wpisie opisałem jak wymusić na Exelu kodowanie UTF8. Okazuje się, że dodanie preambuły poprawia wyświetlanie znaków, ale ma też wpływ na okno dialogowe "Zapisz Jako".



Jak widać na załączonym obrazku, nie wypełnia się domyślna nazwa pliku, oraz "Zapisz jako typ" ustawia się na *.txt zamiast *.csv.
Z pomocą przychodzi kodowanie Windows-1250.


var encoding = Encoding.GetEncoding("windows-1250");
byte[] bytes = encoding.GetBytes(csv.Replace("\r\n", "\n"));
bytes = encoding.GetPreamble().Concat(bytes).ToArray();


Dzięki temu Excel nadal wyświetla poprawne znaki, ale dodatkowo nie tracimy poprawnych wartości w "Zapisz jako".

środa, 30 kwietnia 2014

Polskie znaki w pliku CSV

Często musimy wygenerować pliki CSV po stronie ASP.NET. Niestety użycie kodowania UTF8 nie gwarantuje poprawnego wyświetlania polskich znaków w Excelu.

Wygląda na to, że Excel domyślnie nie stosuje kodowania UTF8. Aby "zmusić" go do tego, należy dodać BOM na początku strumienia.

string csv = GenerateCsv();
var encoding = Encoding.UTF8;
byte[] bytes = encoding.GetBytes(csv);
bytes = Encoding.UTF8.GetPreamble().Concat(bytes).ToArray();
// ... return application/octet-stream with filename=something.csv 

 Teraz otwierając ściągnięty plik w Excelu, widzimy polskie znaki.




Żródło:http://stackoverflow.com/questions/4414088/how-to-getbytes-in-c-sharp-with-utf8-encoding-with-bom