QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

JavaScriptでのメッセージ表示で文字化け

ASP.NETで開発を行っております。

ボタンクリック時にJavaScriptの関数を呼び出し、関数内でメッセージボックスを表示したいのですが、文字化けしてしまいます。

サーバー側で
Me.Button.Attributes("onClick") = "return confirm('削除します。よろしいですか?');"
といったメッセージは文字化けせずに表示されます。

これを

Me.Button.Attributes("onClick") = "delete()")

として、JavaScriptの関数で

function delete(){
if (confirm('削除します。よろしいですか?')) return;
}

とするとメッセージの文字が文字化けします。

JavaScript側での文字コードの設定等あるのでしょうか。

設定等あるのならば、設定の方法を教えて頂けませんか。

質問者:お獅子

回答

はじめて投稿します。いつも参考にさせてもらっているので、この問題の別の解決方法をみつけたので、お礼を兼ねてその方法を、、

環境は
XP pro   開発マシン
2003Server 実運用マシン
ASP.net(VBscript)
VisualStudio2003(.net framework1.1)
(ClientはWindows2000以上です(Windowsのみシステム))
です。
web.config内のglobalizationは request...response ともに UTF-8
aspx ファイルの
で保存もUTFのままなので、ほとんどDefaultです。
このままの状態でVBScript内に属性追加で日本語を使用し、外部jsファイルで日本語を
使用すると外部ファイルが文字化けしてしまいました。そこでweb.config内のresponseEncodingをShift-JISにすると今度はVBScript内の日本語が文字化けし、
jsファイルが正常になる、と、困ったことに両方うまくいかなくなりました。

解決策①jsファイル内の日本語は文字コードを使用-> String.fromCharCode
,,,,,現実的ではありません
解決策②aspx ファイルの外部ファイルの指定にcharsetを追加する。

,,,,,,,charsetの下線にエラーの表示がでましたが、実行してみたところ
       正常動作しました。
      
この方法で、.net framework2.0 だったり、ClientマシンのVersion依存なく動くと
いいな、なんて思ったりしてます。

投稿者:oracle

編集 履歴 (0)

解決策②aspx ファイルの外部ファイルの指定にcharsetを追加する。

    <script language=javascript src="外部ファイル名" charset="Shift-JIS">

 ,,,,,,,charsetの下線にエラーの表示がでましたが、実行してみたところ

       正常動作しました。
エンコードが異なる場合、私はいまではこれが正しいかなと思っています。
(特に理由がない限りjsファイルのエンコードをあわせちゃいますが。)

script要素のcharset属性はちゃんとあるようですし。
http://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.2.1
      
この方法で、.net framework2.0 だったり、ClientマシンのVersion依存なく動くと

いいな、なんて思ったりしてます。
ブラウザがちゃんと解釈するかどうかですね、きっと。

投稿者:べる

編集 履歴 (0)

べるさんの書き込み (2004-10-11 23:23) より:

.js ファイルを utf-8 で保存するのが最も手間がかからないのではないでしょうか。

それかWeb.ConfigでresponseEncoding(とrequestEncoding)をshift-jisにするか

ありがとうございました。
上記のどちらの方法でも文字化けせずに表示されました。

質問ですが、「Web.ConfigでresponseEncoding(とrequestEncoding)をshift-jis」
にする事で何か不具合が発生することありますか?

投稿者:お獅子

編集 履歴 (0)

サードパーティ製のサーバーコントロールの中にはUTF-8以外動作保障されない
物がありますので、利用を考えている場合はよく確認した方が良いです。

投稿者:猫山みやお

編集 履歴 (0)

猫山みやおさんの書き込み (2004-10-12 21:55) より:

サードパーティ製のサーバーコントロールの中にはUTF-8以外動作保障されない

物がありますので、利用を考えている場合はよく確認した方が良いです。

わかりました。
UTF-8で保存するやり方のほうが無難そうですね。
どうもありがとうございます。

投稿者:お獅子

編集 履歴 (0)

べるさんの書き込み (2004-10-11 23:23) より:

.js ファイルを utf-8 で保存するのが最も手間がかからないのではないでしょうか。

それかWeb.ConfigでresponseEncoding(とrequestEncoding)をshift-jisにするか

ありがとうございました。
上記のどちらの方法でも文字化けせずに表示されました。

質問ですが、「Web.ConfigでresponseEncoding(とrequestEncoding)をshift-jis」
にする事で何か不具合が発生することありますか?

投稿者:お獅子

編集 履歴 (0)

charsetの指定を変更してもエンコーディング自体はかわりません、それどころか

ブラウザに対して間違った情報を送ることにもなり得ます
htmlレベルでの話です。asp.net仕様やVS.netの動作はあまり考えていませんでした。

charsetを変えると、ASPXファイルの保存形式が変わるのでそれが原因だと思ってました。
VS.NETで、ってことですよね。これが原因ということもありえると思いますよ。

投稿者:べる

編集 履歴 (0)

関数内のJavaScriptとASP.NETが生成したHTMLとのエンコード形式が一致してないのでは?

投稿者:ポテチ

編集 履歴 (0)

HTMLのHEADに

を入れてみましたが結果は同じでした。

投稿者:お獅子

編集 履歴 (0)

ASPXのHTMLヘッダ部に書かれている[charset]は何に指定しているのですか?

投稿者:burton999

編集 履歴 (0)

charsetを変えると、ASPXファイルの保存形式が変わるのでそれが原因だと思ってました。
お恥ずかしい

投稿者:burton999

編集 履歴 (0)

それかWeb.ConfigでresponseEncoding(とrequestEncoding)をshift-jisにするか

charsetの指定を変更してもエンコーディング自体はかわりません、それどころか
ブラウザに対して間違った情報を送ることにもなり得ます。

投稿者:べる

編集 履歴 (0)

関数はJSPファイルに書いてます。

クライアントサイドスクリプトを格納するのに、拡張子 .jsp は適当ではありません。
.js が推奨されます。

名前を付けて保存で「日本語(シフトJIS)」を指定してやってみましたが、結果は同じでした。

ASP.NET によるサーバ出力の文字コード体系は utf-8 であることをご存じないでしょうか?

問題を解決するには、サーバ出力と .js ファイルの文字コードを同じものにする必要があります。

とりあえず、.js ファイルを utf-8 で保存するのが最も手間がかからないのではないでしょうか。

_________________// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/

投稿者:渋木宏明(ひどり)

編集 履歴 (0)

burton999さんの書き込み (2004-10-11 19:46) より:

ASPXのHTMLヘッダ部に書かれている[charset]は何に指定しているのですか?

HTMLを検索しまいたが「charset」はありませんでした。

投稿者:お獅子

編集 履歴 (0)

ありがとうございます。

関数はJSPファイルに書いてます。

名前を付けて保存で「日本語(シフトJIS)」を指定してやってみましたが、結果は同じでした。
どうやって指定すれば良いのでしょうか?教えて頂けますか。

投稿者:お獅子

編集 履歴 (0)

JavaScriptのdelete()はどこに記述されてますか?
jsファイルに記述してあると、そのjsファイル文字コードと
HTMLのヘッダに指定されている文字コードが異なると、このような現象がおきます。

投稿者:burton999

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。