none
encodeURIComponentでShift-Jisのコードを扱いたい RRS feed

  • 質問

  • クライアント側の話なんですが
    stat = stat + '&status' + i + '=' + encodeURIComponent(document.getElementById("status" + i).value)
    となっていた場合に
    valueがSHIFT-JISコードの漢字がURI文字列に変換できません
    システムが全般的にSHIFT-JISで作成されているためにそこだけ
    UTF-8ということもできません。
    2007年3月27日 7:49

回答

  • encodeURIComponent は utf-8 形式の文字列を扱う機能ですので、現行のECMA仕様では ShiftJIS のバイト列をエンコードした結果を得ることはできません。
    また、このメソッドは名称から連想できるように、URI 文字列を加工することを目的としており、Web アプリケーションのシステムが ShiftJIS で動作していようが EUCJP で動作していようが、HTTP の仕様上、URI だけは常に utf-8 で送信されなければならないためです。
     
    ShiftJIS の漢字コードをエンコードした文字列を作成する必要があるのであれば、そのような関数を作成してしまうのが手軽だと思いますし、URI のパラメータとして日本語文字列を使用するのであれば、その部分だけ utf-8 で扱うように再設計しなおすべきでしょう。
    ASP.NET を利用している場合、web.config で入出力のエンコードを指定すれば、クライアント間のやりとりで utf-8 と Shift_JIS の使い分けは ASP.NET のフレームワークがきっちりやってくれるので、意識して扱う部分はほとんどないと思います。
     
    2007年3月28日 7:40

すべての返信

  • encodeURIComponent は utf-8 形式の文字列を扱う機能ですので、現行のECMA仕様では ShiftJIS のバイト列をエンコードした結果を得ることはできません。
    また、このメソッドは名称から連想できるように、URI 文字列を加工することを目的としており、Web アプリケーションのシステムが ShiftJIS で動作していようが EUCJP で動作していようが、HTTP の仕様上、URI だけは常に utf-8 で送信されなければならないためです。
     
    ShiftJIS の漢字コードをエンコードした文字列を作成する必要があるのであれば、そのような関数を作成してしまうのが手軽だと思いますし、URI のパラメータとして日本語文字列を使用するのであれば、その部分だけ utf-8 で扱うように再設計しなおすべきでしょう。
    ASP.NET を利用している場合、web.config で入出力のエンコードを指定すれば、クライアント間のやりとりで utf-8 と Shift_JIS の使い分けは ASP.NET のフレームワークがきっちりやってくれるので、意識して扱う部分はほとんどないと思います。
     
    2007年3月28日 7:40
  • 返事が遅くなってしまい申し訳ありません。
    web.configで解決しました。
    2007年4月23日 16:39