我正在嘗試檢測上傳的文件是否爲有效的UTF-8,並且僅在此之後纔對其內容進行一些操作。它檢測到非UTF-8文件正常,但如果文件是有效的UTF-8,則沒有要處理的內容。沒有要在while(){}
循環中處理的數據。我的錯誤在哪裏?Perl文件上傳。如何多次訪問文件句柄?
use utf8;
use CGI qw(:all -utf8);
use Encode;
my $q = new CGI;
my $file = $q->param('importfile');
my $file_handle = $q->upload('importfile');
my $fhtest = do {
local $/;
<$file_handle>;
};
my $utf8;
eval { $utf8 = decode("utf8", $fhtest, Encode::FB_CROAK) };
if ([email protected]) {
die 'Not a valid UTF-8 file';
}
binmode $file_handle, ':encoding(UTF-8)';
while (<$file_handle>) {
chomp();
# my code here
}
謝謝!第一種使用seek的方法工作正常。嘗試第二個打開假文件句柄 - 沒有數據在'while'循環中處理。那是stratnge,'$ fhtest'確實包含數據,但它不會傳遞給假的文件句柄。 – nixoid 2013-05-06 19:58:19
使用'Encode :: FB_CROAK | Encode :: LEAVE_SRC'修復了這個問題。固定。 – ikegami 2013-05-06 20:16:52