努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


サイドバー

メニュー

インデックス

documents:other:other-011

UTF-8でASPスクリプトを記述する場合の注意

これは何?

IISのASPスクリプトと扱うデータを UTF-8 にする際の注意点メモ書き。

UTF-8を使う意味

最近はUTF-8で多言語を扱うものが多くなってきた。MBCS(マルチバイトキャラクタセット)と比べ、各言語(コード)の処理を考慮しないでも良いのが利点。 さらに、今回はXMLを絡めており、XMLで値を受け表示することもやるのでUTF-8で全てを扱うのは必須となった。

ASPスクリプトをUTF-8で保存する

Windowsのメモ帳であれば保存時にUTF-8が選択できる。

扱うデータはUTF-8でやり取りする

送信時に、キャラクタのエンコーディングをUTF-8である旨明示する。 例えば、HTMLのHEADタグ内部に

<META http-equiv="Content-Type" content="text/html; charset=utf-8">

にしておけば、FORM等で扱うデータの文字コードセットはUTF-8になる。必ずそうなるかはブラウザによって違う可能性が大いにあるので、場合によってはFORMタグに明示的に文字コードセットの指定を行う必要がある。

実験

ファイル群

wa01.asp - 文字を入力するためのフォーム表示ASPスクリプト

 <%@LANGUAGE="JavaScript" %>
 <%
   Response.Charset  = "utf-8";
   Response.Expires  = -1;
   Response.addHeader("Pragma","no-cache");
   Response.addHeader("Cache-control","no-cache");
 %>
 <HTML>
   <HEAD>
 
   <META http-equiv="Content-Type" content="text/html; charset=utf-8">
   <TITLE>WA01</TITLE>
   </HEAD>
   <BODY>
   <H1><%= Request.ServerVariables("SERVER_SOFTWARE") %></H1>
 
   <FORM NAME="F1" METHOD="POST" ACTION="wa02.asp">
   <INPUT TYPE="text" NAME="WA" VALUE="">
   <INPUT TYPE="submit" VALUE="送る">
   </FORM>
   </BODY>
 </HTML>

wa02.asp - wa01.aspから送られてきた文字の表示ASPスクリプト

 <%@LANGUAGE="JavaScript" %>
 <%
   Response.Charset  = "utf-8";
   Response.Expires  = -1;
   Response.addHeader("Pragma","no-cache");
   Response.addHeader("Cache-control","no-cache");
 %>
 <HTML>
   <HEAD>
   <META http-equiv="Content-Type" content="text/html; charset=utf-8">
 
   <TITLE>WA02</TITLE>
   </HEAD>
   <BODY>
   <H1><%= Request.ServerVariables("SERVER_SOFTWARE") %></H1>
   [<%= Request.Form("WA") %>]
   </BODY>
 
 </HTML>

今回は上記2ファイルを、

  • Windows2000Server
  • WindowsXP
  • WindowsServer2003

の各サーバ上にコピーし、各サーバで稼動するIISで表示可能にしておく。

multipage.html - 各サーバのwa01.aspから送られてきた文字を表示するASPスクリプト

 <HTML>
   <HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
   </HEAD>
 
   <BODY>
     <H1>Windows2000Server</H1>
     <IFRAME SRC="http://windows2000/wa01.asp"></IFRAME>
     <H1>WindowsXP</H1>
     <IFRAME SRC="http://windowsXP/wa01.asp"></IFRAME>
     <H1>WindowsServer2003</H1>
     <IFRAME SRC="http://windows2003/wa01.asp"></IFRAME>
   </BODY>
 </HTML>

これはデスクトップにおいて、一画面で3つのサーバの結果を見られるようにする。

実行

まずは、multipage.html を表示します。

ここで、各フレームにOSのIISのバージョンが表示され、テキストボックスが表示されます。 この状態でテキストボックスに「キタキツネ」と入力し、ボタンを押してみます。

Windows2000だと文字化けしてしまいました。

文字化けの原因

ASPスクリプトは基本的に OSのディフォルトの言語を使用します。 IIS5.1やIIS6.0は、ASPスクリプト自体がUTF-8で記述されていると、言語(コード)もUTF-8と解釈するようですが、 IIS5.0は、ASPスクリプトはUTF-8でも扱うデータはOSのディフォルトの言語を採用、としている感じです。 解釈の部妙な違いというか、半端に忠実というか、頭が固いというか…です。

余計な心配なくUTF-8を利用する場合には、OSのディフォルトより優先してUTF-8を使用する旨明示的に示しておきます。 具体的には、ASPスクリプトの @コマンドで コードページ65001を指定します。

参考(MSDN) リンク先が変わってフォローできません

 <%@LANGUAGE="JavaScript" %>
   ↓
 <%@LANGUAGE="JavaScript" CODEPAGE=65001 %>

とします。結果は、

この様に正しく文字が表示されます。

documents/other/other-011.txt · 最終更新: 2014/04/27 17:30 (外部編集)

ページ用ツール