作者: dune
日時: 2004/1/24(22:24)
極悪です。

>perl(ActivePerl v5.8.2 build 808)付属の piconv で 
>UTF-16LE のテキストを Shift-JIS に変換してみたのですが、
>うまくいきません。
>
>一行だけのテキストなら OK なので、なんとなく要らないはず
>の BOM の処理がこけてるのかなと思うのですが(元テキスト
>には BOM はないが)。

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

piconv の中に $/ = "\x0A\x00"; を書いてやれば UTF-16LE の場
合もうまくいきます。他の場合はファイル中に "\x0A\x00" が見つ
からないのでファイル全体を読んでしまい、一見うまく動いてるよう
に見えますが、それはよろしくないでしょう。UNIX だけでなく DOS
も使える人がメンテしてくれれば解決するかな。

D:% cat pxd.pl
#!/usr/local/bin/perl
use strict;
foreach my $file (@ARGV){
        open(FILE,$file) or next;
        binmode FILE;
        while(<FILE>){
                $_ = unpack("H*",$_);
                s/../$& /cg;
                print $_,"\n";
        };
        close FILE;
}
__END__

D:% perl pxd.pl 16BE.uni
30 7b 30 52 00 0d 00 0a
30 7b 30 52 00 0d 00 0a
30 7b 30 52 00 0d 00 0a
30 7b 30 52 00 0d 00 0a

D:% perl pxd.pl 16LE.uni
7b 30 52 30 0d 00 0a
00 7b 30 52 30 0d 00 0a
00 7b 30 52 30 0d 00 0a
00 7b 30 52 30 0d 00 0a
00

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