diff --git a/app/models/import.rb b/app/models/import.rb index d2c53baac..71bc3c1bb 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -217,6 +217,7 @@ class Import < ActiveRecord::Base csv_options = {:headers => false} csv_options[:encoding] = settings['encoding'].to_s.presence || 'UTF-8' + csv_options[:encoding] = 'bom|UTF-8' if csv_options[:encoding] == 'UTF-8' separator = settings['separator'].to_s csv_options[:col_sep] = separator if separator.size == 1 wrapper = settings['wrapper'].to_s diff --git a/test/fixtures/files/import_issues_utf8_with_bom.csv b/test/fixtures/files/import_issues_utf8_with_bom.csv new file mode 100644 index 000000000..1ab78ac4b --- /dev/null +++ b/test/fixtures/files/import_issues_utf8_with_bom.csv @@ -0,0 +1,4 @@ +"priority";subject;description;start_date;due_date;parent;private;progress;custom;version;category;user;estimated_hours;tracker;status +High;First;First description;2015-07-08;2015-08-25;;no;;PostgreSQL;;New category;dlopper;1;bug;new +Normal;Child 1;Child description;;;1;yes;10;MySQL;2.0;New category;;2;feature request;new +Normal;Child of existing issue;Child description;;;#2;no;20;;2.1;Printing;;3;bug;assigned diff --git a/test/unit/issue_import_test.rb b/test/unit/issue_import_test.rb index d4b4db69c..fe4a04872 100644 --- a/test/unit/issue_import_test.rb +++ b/test/unit/issue_import_test.rb @@ -116,6 +116,15 @@ class IssueImportTest < ActiveSupport::TestCase assert_equal 2, issues[2].parent_id end + def test_import_utf8_with_bom + import = generate_import_with_mapping('import_issues_utf8_with_bom.csv') + import.settings.merge!('encoding' => 'UTF-8') + import.save + + issues = new_records(Issue,3) { import.run } + assert_equal 3, issues.count + end + def test_backward_and_forward_reference_to_parent_should_work import = generate_import('import_subtasks.csv') import.settings = {