カレッヂ |
質問者 ぴとりん
投稿日 3/6(火) 05:07:05
はじめまして。早速ですが、質問させて頂きます。 FORMに入力された文字(キーワード)を、URLエンコードしてメタ検索するプログラムを作成しました。いろいろテストをしてみたのですが、「OCNnavi」などのEUCで書かれた検索サイトでは、「車」というキーワードが「ヤ」に化けてしまいます。「車」以外のキーワードは正常にエンコードされるのにどうしてなんでしょう? 代表的なメタ検索の「EasySEARCH」http://www3.nibh.go.jp/EasySEARCH/でも同様の症状でした。これって、私のパソコンがオカシイのでしょうか? それともIE5のブラウザの問題なのでしょうか? ご指導よろしくお願い致します。 URLエンコード $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str =~ tr/ /+/; |
回答者 さくら
[削除]
投稿日 3/7(水) 01:15:51
解決策を示すものではありませんが、参考にして下さい。 PC や IE5 の問題では無いと思います。 まず、各検索エンジンがどのように文字コード変換とマッチ処理を行なっているかは 各プログラムによるので、特定してお話できませんが、文字コードについて書きます。 WIN や MAC を使っているユーザーが検索文字列を送信すると、 シフトJIS で送信されます。 それでは、例の 車 ですが、文字コードは下記のようになっています。 シフトJIS 8ED4 車 EUC BCD6 車 それでは、EUC の 8ED4 はどうなっているかというと、 半角カタカナの ヤ です。(ここでは、全角で入力しました。) シフトJIS の 半角カタカナの ヤ は D4 です。 以上のようになっています。そして、シフトJIS と EUC のコードは、 重なっている部分がかなりあります。 さらに、送信情報が少なく、文字コードが重なっている場合、まさに今回の例がそれです。 8ED4 はシフトJIS の 車 かEUCの半角カタカナの や か判定できない状態になります。 そこで、EUCでマッチ処理をしている場合を考えて見ましょう。 送信された情報をEUCに変換しようとしますが、元の文字コードが判別できずに、 変換できなかったら、マッチはEUCで行ないますので、半角カタカナの ヤ にマッチします。 表示用にEUCを使う場合は 8ED4 のままなので、半角カタカナの ヤ が表示されます。 表示用にシフトJISを使う場合は、8E が取り除かれて D4 になります。 結局、半角カタカナの ヤ が表示されます。 また、文字化けしていても、半角カタカナの シヨ と表示される場合は、 データは、正しく変換されています。ただ、表示が正しくないだけですので、 ブラウザの 表示->エンコード->日本語(自動判別) で正しく表示されるはずです。 これは、情報を正しくEUCに変換できれば、BCD6 に変換されています。 これをシフトJISで表示すると、 BC は半角カタカナの シ D6 は半角カタカナの ヨ このように表示されてしまいます。 長々と書いてしまいましたが、このようになっていますので、 送信情報の文字コードを確実に判定できる文字を一緒に送るか、 又は、判定できるであろう情報量を送信すれば良いという事になります。 |
質問者 ぴとりん
[削除]
投稿日 3/7(水) 07:02:07
おお、さくらさん有難うございます! 丁寧な解説で判りやすかったです。 いままで、jcode.plにて、 &jcode'convert(*word,'euc');を &jcode'convert(*word,'euc','sjis'); としなければいけなかったのですね。 これで謎が全て解けました。 本当に有難うございます。 それにしても、日本語の扱いって面倒っすね。 よろしければ、私のサイトをご覧下さい。 http://www2.jcss.ne.jp/~medama/ とってもヘビーなサイトですが... |
このページは終了したので返信(回答)は書きこめません
Web裏技 |