作者: dune
日時: 2004/1/25(01:12)
極悪です。

>piconv の中身は入力を行単位で読んでるので、リトルエンディア
>ンのファイルを読むと、0A00 が泣き別れになるのが原因でした。

PerlIO はこの辺もちゃんと面倒を見てくれるようです。

--^pxd.pl
#!/usr/local/bin/perl
use strict;
my $fo = "con";
use Getopt::Std;
my %opt;
getopts('f:t:',\%opt);
$opt{f} ||= 'CP932';
$opt{t} ||= 'CP932';
open(my $FO,">:encoding($opt{t})",$fo) or die;
foreach my $fi (@ARGV){
    open(my $FI,"<:encoding($opt{f})",$fi) or next;
    while(<$FI>){
#       $_ = unpack("H*",$_); s/../ $&/g; chomp;
        printf $FO $_;
    };
    close $FI;
}
close $FO;
__END__
--$

D:% xd -eb 16BE-BOM.txt
0000000  feff 307b 3052 000d 000a 307b 3052 000d
0000010  000a
0000012

D:% xd -eb 16BE-N.txt
0000000  307b 3052 000d 000a 307b 3052 000d 000a
0000010

D:% xd -eb 16LE-BOM.txt
0000000  fffe 7b30 5230 0d00 0a00 7b30 5230 0d00
0000010  0a00
0000012

D:% xd -eb 16LE-N.txt
0000000  7b30 5230 0d00 0a00 7b30 5230 0d00 0a00
0000010

D:% perl pxd.pl -f UTF-16 -t CP932 16BE-BOM.txt
ほげ
ほげ

D:% perl pxd.pl -f UTF-16 -t CP932 16LE-BOM.txt
ほげ
ほげ

D:% perl pxd.pl -f UTF-16BE -t CP932 16BE-N.txt
ほげ
ほげ

D:% perl pxd.pl -f UTF-16LE -t CP932 16LE-N.txt
ほげ
ほげ

D:%

UTF-16 は必ず BOM を要求するようです(自動で BE とは
しない)。

D:% perl pxd.pl -f UTF-16 -t CP932 16BE-N.txt
UTF-16:Unrecognised BOM 307b at pxd.pl line 18.

D:% perl pxd.pl -f UTF-16 -t CP932 16LE-N.txt
UTF-16:Unrecognised BOM 7b30 at pxd.pl line 18.

D:%
-- 
FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?