我必须自己删除BOM吗?

时间:2014-12-22 14:02:37

标签: perl encoding utf-16 utf-16le

我正在使用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?或者我做错了什么?

0 个答案:

没有答案