on-the-job training -7ページ目

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ハッシュの作成ができた!