UTF-16LE でエンコードされた CSV ファイルを使用しています。Perl モジュール Text::CSV_XS を使用してデータを処理します。
my $csv = Text::CSV_XS->new ({ binary => 1, sep_char => ';', quote_char => undef, });
open my $io, '<:encoding(UTF-16LE)', $csv_file or die "$csv_file: $!";
my $header_row = $csv->getline($io);
Data::Dumper を使用して最初の行を印刷すると、出力に BOM が表示されます。
print Dumper $header_row->[0];
# output:
# $VAR1 = "\x{feff}first header col";
perldocによると、内容が UTF-16LE であることを明示的に述べているため、BOM は保持されます。書き込み:encoding(UTF-16)
のみの場合、BOM は削除されます。
しかし、必要なエンコーディングを明示的に示すために、コードに保持したいと思います。これは良いことだと思います。そうでない場合は、教えてください。
しかし、次に、たとえば次のように記述して、 BOM を処理する必要があります。$header_row->[0] =~ s/^\x{FEFF}//;
これは正常ですか?utf-16 でエンコードされたファイルを操作する場合、文字列の BOM を気にする必要がありますか? それとも私は何か間違っていますか?