作者: 藤岡和夫
日時: 2004/1/19(23:17)
On Sat, 17 Jan 2004 17:19:33 +0900
dune <FZH01112@...> さんwrote:

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



> 
> piconv の元ネタ? の iconv も改行の処理をミスっているの
> か 0x0D が余計につきます(入出力どちらかのテキスト/バイ
> ナリモードが変?)。
> 
> 結局 tconv(http://www.piedey.co.jp/softs/tconv.html)
> しか期待どおり動いてません。
> 
> 何か勘違いしてますか?
> 
 同じようなことのつもりでやっていたのですが、次のようになりました。

 TeraPadのUnicodeモードで、

ほげ
ほげ

と書いて、data.uni.txtで保存してテストしました。

 WindowsのUnicodeテキストはUTF-16のリトルエンディアンということですから、
おかしくないと思います。

C:\Scripts\dune>xd data.uni.txt
     0: FF FE 7B 30 52 30 0D 00  0A 00 7B 30 52 30 0D 00
    10: 0A 00

C:\Scripts\dune>iconv -f UTF-16 -t CP932 data.uni.txt
ほげ
ほげ

正常。

C:\Scripts\dune>iconv -f UTF-16LE -t CP932 data.uni.txt
iconv: data.uni.txt: cannot convert

当然。

C:\Scripts\dune>piconv -f UTF-16 -t CP932 data.uni.txt
UTF-16:Unrecognised BOM 7b at C:/Perl5.8/lib/Encode.pm line 184, <> line 2.
ほげ

おかしい。

C:\Scripts\dune>piconv -f UTF-16LE -t CP932 data.uni.txt
?到??

おかしい。

 次に、バイナリエディタでBOMを削除して、

C:\Scripts\dune>xd data.uni
     0: 7B 30 52 30 0D 00 0A 00  7B 30 52 30 0D 00 0A 00

C:\Scripts\dune>iconv -f UTF-16LE -t CP932 data.uni
ほげ
ほげ

C:\Scripts\dune>iconv -f UTF-16LE -t CP932 data.uni | xd
     0: 82 D9 82 B0 0D 0D 0A 82  D9 82 B0 0D 0D 0A

で、特に問題なし。

C:\Scripts\dune>piconv -f UTF-16LE -t CP932 data.uni
?到??

C:\Scripts\dune>piconv -f UTF-16LE -t CP932 data.uni | xd
     0: 82 D9 82 B0 0D 3F 93 9E  3F 3F

 やはり、おかしい。

> 
> 
> D:% echo 1234 | xd
> 0000000  3231 3433 0d20 000a
> 0000007
> 
> D:% xd data.uni
> 0000000  307b 3052 000d 000a 307b 3052 000d 000a
> 0000010

 このデータはビッグエンディアン?

> 
> D:% piconv -f UTF-16LE -t CP932 data.uni
> ?到??
> D:% piconv -f UTF-16LE -t CP932 data.uni | xd
> 0000000  d982 b082 3f0d 9e93 3f3f
> 000000a
> 
> D:% iconv -f UTF-16LE -t CP932 data.uni
> ほげ
> ほげ
> 
> D:% iconv -f UTF-16LE -t CP932 data.uni | xd
> 0000000  d982 b082 0d0d 820a 82d9 0db0 0a0d
> 000000e
> 
> D:% tconv utf-16le x-sjis-cp932 data.uni
> ほげ
> ほげ
> 
> D:% tconv utf-16le x-sjis-cp932 data.uni | xd
> 0000000  d982 b082 0a0d d982 b082 0a0d
> 000000c
> 
> D:%
> -- 
> FZH01112 at nifty.com
> http://hpcgi1.nifty.com/dune/gwiki.pl?
> 

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/