任意のコードに変換する場合、
例1
&Jcode::convert(\$line, "euc");
と
例2
&jcode::convert(\$line, "euc", "sjis");
では、例2の方が確実なのでしょうか?
どなたか教えてください。
はい、例2の方が確実です。
自動判別は完全ではありませんので、失敗して文字化けを起こすことがあります。
例えばJcode.pm の文字コード自動判定にて、自動判別に失敗した事例が挙げられています。
また、自動判別するとその分遅くなります。
Encode, Text::Iconv, Unicode::Japanese, Jcode, jcode.pl のベンチマーク比較によれば、
「ASCII, 漢字、カタカナ、ひらがなの混じったtext」という短い文章を1秒間にどれだけ SJIS に変換できるかというテストを行ったところ、
変換元を指定した場合 (Jcode::convert(fixed-sjis-pp206)) → 21,739回/秒
変換元を自動判別した場合 (Jcode::convert(guess-sjis-pp206)) → 5,945回/秒
と、4倍近い速度差が出ています。
(もっともこのテストでは1行程度の短い文章だから相対的に自動判別のコストが大きくなっているのであって、実際に使われるであろう長い文章では判別コストはもっと低くなると思われますが)
とにかく、変換元の文字コードがあらかじめ判っているなら面倒でも指定した方が良いです。
例2は
&Jcode::convert(\$line, "euc", "sjis");
ですよね?
2の方が確実です。
入力文字列指定を省略した場合、getcode で推測を行いますが少なくとも日本語のコード判別率は 100% ではありません。
もし事前に入力文字列のコードが分かっているなら、指定したほうが確実です。
また、getcode を使わなくて済む分早いです。(たぶんちょっとだけ)
http://search.cpan.org/dist/Jcode/Jcode/Nihongo.pod#(12469)(12502)(12523)(12540)(12481)(12531)
回答ありがとうございます
コード判別はややこしいですね、、、
はい、例2の方が確実です。
自動判別は完全ではありませんので、失敗して文字化けを起こすことがあります。
例えばJcode.pm の文字コード自動判定にて、自動判別に失敗した事例が挙げられています。
また、自動判別するとその分遅くなります。
Encode, Text::Iconv, Unicode::Japanese, Jcode, jcode.pl のベンチマーク比較によれば、
「ASCII, 漢字、カタカナ、ひらがなの混じったtext」という短い文章を1秒間にどれだけ SJIS に変換できるかというテストを行ったところ、
変換元を指定した場合 (Jcode::convert(fixed-sjis-pp206)) → 21,739回/秒
変換元を自動判別した場合 (Jcode::convert(guess-sjis-pp206)) → 5,945回/秒
と、4倍近い速度差が出ています。
(もっともこのテストでは1行程度の短い文章だから相対的に自動判別のコストが大きくなっているのであって、実際に使われるであろう長い文章では判別コストはもっと低くなると思われますが)
とにかく、変換元の文字コードがあらかじめ判っているなら面倒でも指定した方が良いです。
回答ありがとうございます。
実は変換元の文字コード、、、わからないんです(;;)
かなりランダムにソースをひっぱってくるものですから、、、。
これは、しょうがないとしてある程度はあきらめることにします(;;)
回答ありがとうございます。
実は変換元の文字コード、、、わからないんです(;;)
かなりランダムにソースをひっぱってくるものですから、、、。
これは、しょうがないとしてある程度はあきらめることにします(;;)