- ベストアンサー
javascriptで文字コード変更
いつもお世話になっております。 今回はjavascriptの文字コードについてお聞きしたいです。 現在、CGIの応答でテキストを受けて、それをjavascriptで変換して表示するというものを作っていますが、この応答に漢字、ひらがななどが入ると文字化けしてしまいます。 調べてみると、CGIの応答はshift-jisで返しているのですが、javascriptはUTF-8しか扱えないと書いてありました。 なんとか応答のCGIはShift-Jisを送り、javascriptでうまく表示できるようにしたいのですが、方法はないでしょうか? ご教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
というか、現在のJavaScriptでは定数の文字列はエンコードが何で あっても自動的にUTF-8として処理されてしまうのでURLエンコード したりするとUTF-8のエンコードになってしまいますけど、CGIから JavaScriptに対して渡した文字列はSJISでも問題なく処理できるはず です。 (ただし、SJISの文字列をURLエンコードしたものをJavaScriptに渡した 場合、そのままではJavaScriptで処理できません) Ajaxなどでも、普通にSJIS使えますし。 それでも、UTF-8よりも不具合がでやすかったりいろいろ問題もあり ますけど。 多分、それは処理の仕方が悪いかなんかだと思うのでソース書いた 方がいいかもしれません。 あとは、OSやブラウザなどの環境も必要です。
その他の回答 (3)
- pick52
- ベストアンサー率35% (166/466)
一応、AjaxではUTF-8を使うことを推奨しています。 (一部ではUTF-8でないとダメのように書いてあることもありますが 大抵の場合は正常に動作します) 詳細は以下のURLを見た方がいいかも。 http://jsgt.org/ajax/ref/charset_test/responsetext/seu8/sample.htm http://jsgt.org/ajax/ref/charset_test/responsetext/test_1_make_table.php http://tech.bayashi.jp/archives/entry/studyajax/2006/001288.html
お礼
今回はご回答ありがとうございました。 下記のお礼に記入しているようにして解決いたしました。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
文字コードを指定してください。 基本的にはどんな文字コードでも使えます。 http://okwave.jp/qa4168549.html
お礼
今回はご回答ありがとうございました。 下記のお礼に記入しているようにして解決いたしました。
- yambejp
- ベストアンサー率51% (3827/7415)
>javascriptはUTF-8しか扱えないと書いてありました。 そんなことはないです。文字コードにあった書き方さえすればscript内で すきなコードが使えるはずです もしかしてなにかjsライブラリでも使っていますか? もしそのライブラリがUTF-8のみ対応であれば、しょうがないですが
お礼
ご回答ありがとうございました。 CGIの方に"charset=Shift-JIS"をつけたら出来るようになりました。
補足
普通にXMLHttpRequestやActiveXObjectを使って通信をしています。 その応答をresponseとして、以下のように処理しています。 function display() { var str = response; var cont = new Object(); cont = str.split(","); // 応答を","で分ける for (var i = 0; i < cont.length; i++) { document.getElementById(hogehoge).innerHTML = cont[i]; } } ただCGIにSJISで送信したのち、CGIの処理で一度UTF-8にしており、送信する際、再びSJISにして応答を送信しています。 firefoxでみると応答受信した際、すでに漢字の部分は文字化けしています。 OSとブラウザ WinXP IE6.0、firefox2.0,3.0 Vista IE7.0、firefox2.0,3.0 以上の6通りの組み合わせで同じ症状が出ました。
お礼
今回はご回答ありがとうございました。 下記のお礼に記入しているようにして解決いたしました。 文字コードが何でも使えるということがわかってよかったです。
補足
ご回答ありがとうございます。 簡単なソースや環境は下記の質問の補足にて書きましたので確認お願いします。 >>ただし、SJISの文字列をURLエンコードしたものをJavaScriptに渡した 場合、そのままではJavaScriptで処理できません 下記補足にも書きましたが、CGIへの送信にはSJISで行い、CGI内部ではUTF-8で処理し、応答の際再度SJISにして送信しています。このことがご指摘の点に当てはまるのでしょうか? またUTF-8のまま応答を返すと、文字化けせずに表示するのですが、htmlはSJISで書いていて、javascript部分で扱ったフォームの中のみUTF-8で入れるというのは不都合は起きないのでしょうか? わかりにくいかもしれないですがご教授いただければ幸いです。 よろしくお願いします。