1

我正在使用 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。

但我想将其保留在代码中以明确说明所需的编码。我想这是一件好事。如果没有,请告诉我。

但是,我必须处理 BOM,例如通过编写:$header_row->[0] =~ s/^\x{FEFF}//;

这是正常的吗?在处理 utf-16 编码文件时,我是否必须关心字符串中的 BOM?还是我做错了什么?

4

0 回答 0