From: Sven Schöling Date: Tue, 31 Jul 2012 12:57:49 +0000 (+0200) Subject: Bei Importdaten das UTF8 BOM ignorieren. X-Git-Tag: release-3.0.0beta1~307^2 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/kivitendo-erp.git/commitdiff_plain/07a38b9f29bf31183286ac25fa460badbf0bee23 Bei Importdaten das UTF8 BOM ignorieren. behebt Bug 1872 --- diff --git a/SL/Helper/Csv.pm b/SL/Helper/Csv.pm index 3132b2846..5b629ee63 100644 --- a/SL/Helper/Csv.pm +++ b/SL/Helper/Csv.pm @@ -111,6 +111,14 @@ sub _check_header { ]) unless $header; } + # Special case: utf8 BOM. + # certain software (namely MS Office and notepad.exe insist on prefixing + # data with a discouraged but valid byte order mark + # if not removed, the first header field will not be recognized + if ($header && $header->[0] && $self->encoding =~ /utf-?8/i) { + $header->[0] =~ s/^\x{FEFF}//; + } + return unless $header; return $self->header([ map { lc } @$header ]); } diff --git a/t/helper/csv.t b/t/helper/csv.t index 4e7ef121c..63fc858c9 100644 --- a/t/helper/csv.t +++ b/t/helper/csv.t @@ -1,4 +1,4 @@ -use Test::More tests => 40; +use Test::More tests => 41; use lib 't'; @@ -285,11 +285,21 @@ is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'case insensitive hea ##### $csv = SL::Helper::Csv->new( - file => \"Kaffee", - header => [ 'Description' ], - class => 'SL::DB::Part', +file => \"Kaffee", +header => [ 'Description' ], +class => 'SL::DB::Part', ); $csv->parse; is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'case insensitive header as param works'; +##### + +$csv = SL::Helper::Csv->new( + file => \"\x{FEFF}description\nKaffee", + class => 'SL::DB::Part', + encoding => 'utf8', +); +$csv->parse; +is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'utf8 BOM works (bug 1872)'; + # vim: ft=perl