我有簡單的Perl腳本來比較兩個文件。 結果我使用UTF8 BOM編碼以不同文件編寫。 要保存BOM文件中的文本,我將chr(65279)打印到結果文件的開頭。有時輸入的文本在文本的乞求中已經包含BOM char,並且我的腳本會再打印一次。如何在Perl中使用BOM編碼檢測UTF8
現在的問題是:我如何解決它,以便不打印此BOM字符兩次。
請參見下面的我的Perl代碼文本:
use strict;
use warnings;
use List::Compare;
use Cwd 'abs_path';
use open ':encoding(utf8)';
use open IO => ':encoding(utf8)';
open F, "<$ARGV[0]" or die $!;
open S, "<$ARGV[1]" or die $!;
my @a=<F>;
my @b=<S>;
close F;
close S;
my $lc = List::Compare->new(\@a, \@b);
my @intersection = $lc->get_intersection;
my @missing = $lc->get_unique;
my @extra = $lc->get_complement;
open EXTRA, ">".$ARGV[2]."file_extra.txt" or die("Unable to open the file");
open MISSING, ">".$ARGV[2]."file_missing.txt" or die("Unable to open the file");
open SUBTRACTED, ">".$ARGV[2]."file_subtr.txt" or die("Unable to open the file");
#Turn on UTF-8 BOM support
print EXTRA chr(65279);
print MISSING chr(65279);
print SUBTRACTED chr(65279);
print MISSING @missing;
print EXTRA @extra;
print SUBTRACTED @intersection;
close MISSING;
close EXTRA;
close SUBTRACTED;
爲什麼不乾脆放棄BOM?對於UTF-8,它完全是可選的,因爲UTF-8字節總是以相同順序寫入,而不管平臺的字節順序如何。 –
我需要這個將輸出文本文件傳遞給另一個只支持帶有BOM的UTF8的應用程序,如果我將通過簡單的UTF8編碼傳遞文本文件 - 某些字符將會失真。 –