• ベストアンサー

urlエンコード後の文字コードは何?

$str = "%E3%82%84%E3%81%BE+%E3%81%8B%E3%82%8F"; $str =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; こうやってurlエンコードすると、以下のようになります。 「やま+かわ」 1.この「やま+かわ」というのは文字コードは何なんでしょうか? 2.Jcode.pmなどのライブラリを使わずに、utf-8で統一したCGIを書きたいのですが、この文字列をどうすればいいでしょうか。コツを教えてください。 3.あと、+を半角スペースに置換する以外に なにか特別なルールはありますか? 4.参考になるWebページがあれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • wildmole
  • ベストアンサー率62% (5/8)
回答No.2

デコードして得られる文字列の文字コードは、エンコード前の文字列の文字コードです。 入力データがSJISならSJIS、EUC-JPならEUC-JPです。 従って、他に入力データの文字コードを指定するヒントがないのなら、Jcodeなどで行っているように、文字データから文字コードを「推定」する必要があります。 Jcode.pmを使いたくない理由が不明ですが、Jcodeを使わないのであれば、当然ながら文字コードの自動判定、UTF-8への変換ロジックを自力で実装する必要があります。 外部プログラムを使用してよいならnkfなどを呼び出すのもよいでしょう。

Scholes_B
質問者

お礼

ありがとうございます。 たいへんに納得です。

その他の回答 (1)

回答No.1

 うろ覚えな回答で申し訳ございません。 先ず >urlエンコードすると  と有りますが貴方がやってらっしゃるのは デコードではないでしょうか?  つまり逆に2の答えがデータをエンコードすれば いいという答えになると思います。  unpackという関数がありますのでそれを 使われては如何でしょうか?  下記に参考となるURLを付けておきます。  上下いたしましたが1については基本的に 2バイト文字はsjisでデータは出てくると思います。  但し、何処かで文字コードを指定していると話は 変わりますが…。  

参考URL:
http://www.mikeneko.ne.jp/~lab/perl/numerical_transform/
Scholes_B
質問者

お礼

ありがとうございまーす。

関連するQ&A