JavaScriptのエンコードの違いによる文字化けについて
たまに何だっけ??と、タグをドワスレするので書いておきます。
JavaScriptを外部ファイルで作成した場合に本体のHTMLとエンコードが異なることがありますよね。
もちろんJavaScriptを自作してればいいのだけど。
ライブラリなどは、その後のアップデートも考えると、
「JavaScriptファイルのエンコードを変更して保存し直して・・・」
なんて毎回やってたら、そのうち忘れて文字化けの原因となるので、あまりよい方法とは思えません。
<<例>>
以下の様なHTMLとJSファイルがあります。
[test.html](EUC)
<script type=text/javascript src="test.js"></script>
<input type="button" value="PUSH" onclick="Message()"/>
[test.js](UTF-8)
function Message(){
alert( "こんにちは!" );
}
『PUSH』ボタンをクリックすると、JavaScriptエラー(または文字化け)が発生します。
このエンコードの違いは、以下のようにJavaScriptファイルを定義する際に、JavaScriptファイルのエンコードを指定することで回避できます。
<script type=text/javascript src="test.js" charset="UTF-8"></script>
ASPでSHIFT-JISからUTF-8にエンコードする方法
ASPは、サスガ マイクロソフト!というほど、SJIS以外は超貧弱。
まぁ、VBScript自体が超貧弱なわけですが・・・(涙)
今更・・・といってしまえばそれまで・・・
いつも結構悩むので、SHIFT-JISからUTF-8にエンコードする方法について。
結論から言うと、VBScriptでUTF-8への変換って無理!
(もちろん、仕様が公開されているので自分で作ればいいのだが・・・)
結果、JavaScriptで行うことにしました。
結構このサイトがescape-codec-library ヒットするので、まずはダウンロードして試してみることに。
<<サンプルコード>
(わざわざサーバ側でやることも無いかな・・・笑)
<%
Option Explicit
Dim strValue
strValue = "サンプル"
Response.Write enc2UTF8( strValue )
%>
<SCRIPT LANGUAGE="JavaScript" RUNAT="server" src="ecl.js"></SCRIPT>
<SCRIPT LANGUAGE="JScript" RUNAT="server">
function enc2UTF8( str ){
return EscapeUTF8(str);
}
</SCRIPT>
<<実行結果>>
%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB
結果は、見てのとおりURLエンコードされている。
必要に応じてJavaScriptのunescape()などを使うと良い。
UTF-8は3バイト区切りなので、
%E3%82%B5 = サ
%E3%83%B3 = ン
%E3%83%97 = プ
%E3%83%AB = ル
となっている。
はい。良くできました!!
ASPでSHA1ハッシュを作成する
SHA1ハッシュをVBScritで作成しようと試行錯誤したが・・・。
結果 → うまくいかない orz
もちろん、仕様が公開されているので、自分で作成すればよいのだが。。。
あまり時間をかけている余裕も無いので、JavaScriptのライブラリを検索。
http://labs.cybozu.co.jp/blog/mitsunari/2007/07/sha1_1.html のサイトで配布している、sha1.jsがなかなか優秀であることがわかった。
ただし、日本語が含まれる場合は、UTF16として処理されるので、エンコードに注意する必要がある。
(ライセンス:BSD)
<<サンプルコード>>
<%
Option Explicit
Dim strValue
strValue = "サンプル"
Response.Write DoHashSHA1( strValue )
%>
<SCRIPT LANGUAGE="JavaScript" RUNAT="server" src="sha1.js"></SCRIPT>
<SCRIPT LANGUAGE="JScript" RUNAT="server">
function DoHashSHA1( str ){
return CybozuLabs.SHA1.calc(str);
}
</SCRIPT>
<<結果表示>>
a63c0c68d8c783a1d016fa662b5daa752d2f0ad0
これで、目的のASPでSHA1ハッシュの作成ができた!