プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
今回はjavascriptの文字コードについてお聞きしたいです。

現在、CGIの応答でテキストを受けて、それをjavascriptで変換して表示するというものを作っていますが、この応答に漢字、ひらがななどが入ると文字化けしてしまいます。
調べてみると、CGIの応答はshift-jisで返しているのですが、javascriptはUTF-8しか扱えないと書いてありました。

なんとか応答のCGIはShift-Jisを送り、javascriptでうまく表示できるようにしたいのですが、方法はないでしょうか?
ご教授願います。

A 回答 (4件)

というか、現在のJavaScriptでは定数の文字列はエンコードが何で


あっても自動的にUTF-8として処理されてしまうのでURLエンコード
したりするとUTF-8のエンコードになってしまいますけど、CGIから
JavaScriptに対して渡した文字列はSJISでも問題なく処理できるはず
です。
(ただし、SJISの文字列をURLエンコードしたものをJavaScriptに渡した
場合、そのままではJavaScriptで処理できません)
Ajaxなどでも、普通にSJIS使えますし。
それでも、UTF-8よりも不具合がでやすかったりいろいろ問題もあり
ますけど。

多分、それは処理の仕方が悪いかなんかだと思うのでソース書いた
方がいいかもしれません。
あとは、OSやブラウザなどの環境も必要です。

この回答への補足

ご回答ありがとうございます。
簡単なソースや環境は下記の質問の補足にて書きましたので確認お願いします。

>>ただし、SJISの文字列をURLエンコードしたものをJavaScriptに渡した
場合、そのままではJavaScriptで処理できません

下記補足にも書きましたが、CGIへの送信にはSJISで行い、CGI内部ではUTF-8で処理し、応答の際再度SJISにして送信しています。このことがご指摘の点に当てはまるのでしょうか?
またUTF-8のまま応答を返すと、文字化けせずに表示するのですが、htmlはSJISで書いていて、javascript部分で扱ったフォームの中のみUTF-8で入れるというのは不都合は起きないのでしょうか?
わかりにくいかもしれないですがご教授いただければ幸いです。
よろしくお願いします。

補足日時:2008/08/05 23:20
    • good
    • 0
この回答へのお礼

今回はご回答ありがとうございました。
下記のお礼に記入しているようにして解決いたしました。

文字コードが何でも使えるということがわかってよかったです。

お礼日時:2008/08/06 20:46

一応、AjaxではUTF-8を使うことを推奨しています。


(一部ではUTF-8でないとダメのように書いてあることもありますが
大抵の場合は正常に動作します)

詳細は以下のURLを見た方がいいかも。

http://jsgt.org/ajax/ref/charset_test/responsete …
http://jsgt.org/ajax/ref/charset_test/responsete …
http://tech.bayashi.jp/archives/entry/studyajax/ …
    • good
    • 1
この回答へのお礼

今回はご回答ありがとうございました。
下記のお礼に記入しているようにして解決いたしました。

お礼日時:2008/08/06 20:46

文字コードを指定してください。


基本的にはどんな文字コードでも使えます。

http://okwave.jp/qa4168549.html
    • good
    • 0
この回答へのお礼

今回はご回答ありがとうございました。
下記のお礼に記入しているようにして解決いたしました。

お礼日時:2008/08/06 20:46

>javascriptはUTF-8しか扱えないと書いてありました。



そんなことはないです。文字コードにあった書き方さえすればscript内で
すきなコードが使えるはずです

もしかしてなにかjsライブラリでも使っていますか?
もしそのライブラリがUTF-8のみ対応であれば、しょうがないですが

この回答への補足

普通に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通りの組み合わせで同じ症状が出ました。

補足日時:2008/08/05 23:09
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
CGIの方に"charset=Shift-JIS"をつけたら出来るようになりました。

お礼日時:2008/08/06 20:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!