From 07a38b9f29bf31183286ac25fa460badbf0bee23 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Tue, 31 Jul 2012 14:57:49 +0200 Subject: [PATCH] Bei Importdaten das UTF8 BOM ignorieren. behebt Bug 1872 --- SL/Helper/Csv.pm | 8 ++++++++ t/helper/csv.t | 18 ++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) 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 -- 2.39.5