我正在使用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,BOM会被保留,因为我明确说明内容为UTF-16LE。仅编写:encoding(UTF-16)
时,将删除BOM。
但是我想在代码中保留它以明确说明所需的编码。我想这是件好事。如果没有,请告诉我。
但是,我必须handle the BOM,例如写下:$header_row->[0] =~ s/^\x{FEFF}//;
这是正常的吗?使用utf-16编码文件时,我是否必须关心字符串中的BOM?或者我做错了什么?