This has been a re-occurring support issue: When using one of Koha's many CSV download options, the exported CSV file doesn't open as UTF-8 in Excel, resulting in broken diacritics. LibreOffice doesn't show the issue. The only way to fix it right now is not to open the file directly, but to use the import functionality in Excel as it lets you pick the encoding and separators. This means a lot of extra steps and clicks, which make the CSV export functionalities in Koha hard to use. It turns out that Excel will import the CSV correctly, if we convert the encoding of the exported CSV file from UTF-8 to UTF-8-BOM. Problematic CSV exports include: * Exporting a basket summary page as CSV * Using CSV profile based exports in general, including: lists, basket, lost items report * ... Can we 'fix' the encoding to use BOM?
I started thinking about this after looking at bug 23685 too. I'm not entirely sure if we want to add a BOM to our CSV exports or not.. there are still programs out there written to work with ascii only and they struggle with BOM's. That said, excel is the most likely target so adding a BOM for that would be sensible. We could do with checking that adding said BOM doesn't break other popular tools like OpenOffice or LibreOffice however. Text::CSV::Encoded doesn't have any native BOM support, but it appears we're just dealing with strings. Perhaps we could use File::BOM
Created attachment 171650 [details] [review] Bug 33635: Add BOM to report exports as CSV When you export a report as CSV excel will not recognise that it's encoding is utf-8 unless there is a correct Byte Order Mark prepended to the file. This patch adds such a BOM to the output file allowing Excel to treat the file correctly.
Please test this
Test plan: 1.) search for a title with one item and edit the item 2.) add the internal note: "Test the diacritics ä ö ü é è ÄÖÜ" 3.) copy the biblionumber of the title 4.) create an sql report: SELECT itemnotes_nonpublic from items where biblionumber=<copied biblionumber> 5.) run report 6.) download as csv file 7.) open in excel 8.) Check that the diacritics do not look like above (internal note) 9.) Apply Patch 10.) repeat steps 5-7 11.) Check that the diacritics look like above (internal note)
Created attachment 171677 [details] [review] Bug 33635: Add BOM to report exports as CSV When you export a report as CSV excel will not recognise that it's encoding is utf-8 unless there is a correct Byte Order Mark prepended to the file. This patch adds such a BOM to the output file allowing Excel to treat the file correctly. Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu>
You're a star Micheal, thanks for testing ☺️
Created attachment 171837 [details] [review] Bug 33635: Add BOM to report exports as CSV When you export a report as CSV excel will not recognise that it's encoding is utf-8 unless there is a correct Byte Order Mark prepended to the file. This patch adds such a BOM to the output file allowing Excel to treat the file correctly. Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu> Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Nice one. This kind of thing has driven me nuts elsewhere in the past...
Thanks for all the hard work! Pushed to main for the next 24.11.00 release as RM Assistant
Doesn't apply to 24.05.x, rebase if needed.
Oh it seems duplicate of https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=39197 but I think I still have this issue (no BOM) in my 21.11 Koha. I am going to check again
I contact my support provider to check if is not working in our Koha and see why.
*** Bug 39197 has been marked as a duplicate of this bug. ***
(In reply to Mathieu Saby from comment #12) > I contact my support provider to check if is not working in our Koha and see > why. This is only fixed in 24.11 - see "versions released in".
Oh of course, I need sleep ;-) and my Koha is 23.11... It could be nice if this patch could be applied to 24.05 and 23.11
I'm working on a similar problem in labels/label-create-csv.pl and I noticed adding the BOM isn't enough in all cases. With certain data, for some reason, it doesn't come out UTF-8 encoded. It comes out Latin-1 encoded instead. I think because it bumps into things like \xF6 which are actually Unicode codepoints and not UTF-8 bytes. But if I explicitly state the output is UTF-8 under the BOM print then all is well: binmode STDOUT, ':encoding(UTF-8)'; Text::CSV_XS explains this a bit https://metacpan.org/pod/Text::CSV_XS#Unicode And... looking at reports/guided_reports.pl it looks like we get around that problem because we're using Text::CSV::Encoded. But first decoding and scrubbing the string for the header? Interesting... Looks like Text::CSV::Encoded was added back in 2014 and can still use Text::CSV_XS under the hood, so that's good...
(In reply to David Cook from comment #8) > Nice one. This kind of thing has driven me nuts elsewhere in the past... PS Bug 39327 - "UTF-8 BOM missing from label creator CSV and some UTF-8 output broken" is ready for testing :D