極悪です。
藤岡和夫 さんの [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?