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

藤岡和夫 さんの [TSperl:307] Re: piconv でUTF-16LE を 
Shift-JISにしたいけど? から
>
>> > D:% xd data.uni
>> > 0000000  307b 3052 000d 000a 307b 3052 000d 000a
>> > 0000010
>> 
>>  このデータはビッグエンディアン?

今思うと大失敗だと思いますが、僕が使っている xd はファイル先
頭から機械的に2バイト単位で読み出してリトルエンディアン(以
下 LE)で表示します。上の結果は、xd がリトルエンディアン表示
なのにも関わらずビッグエンディアン的にデータが並んでいるので、
元のデータはリトルエンディアンということになります。

実は xd に -eb をつけるとビッグエンディアン表示(というより
は元データに忠実に表示とうべきか)できるのでした:

D:% xd -eb data.uni
0000000  7b30 5230 0d00 0a00 7b30 5230 0d00 0a00
0000010

D:% xd -eb data_bom.uni
0000000  fffe 7b30 5230 0d00 0a00 7b30 5230 0d00
0000010  0a00
0000012

D:%

> UTF-16のBOMなしはUTF-16BEと一緒。UTF-16LEではない。

僕は知らなかったのですが、そうらしいですね。UTF-16 に BOM が
ついていればそれに従う。BOM がない場合は BE と仮定する。

ちなみに piconv の中身は入力を行単位で読むようになっているの
で、このロジックだと(BOM は一行目にしかないので)二行目以降
は常に UTF-16BE になりそうです。せっかくオブジェクトになって
るのだから、最後に読んだ BOM をキャッシュしてくれると良いで
すね($enc->lastBOM とか)。
-- 
FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?