努力したWiki

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

ユーザ用ツール

サイト用ツール


documents:other:memo01:other-011

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
documents:other:memo01:other-011 [2025/11/20 09:37] – ↷ documents:other:memo02:other-011 から documents:other:memo01:other-011 へページを移動しました。 k896951documents:other:memo01:other-011 [2026/05/16 02:18] (現在) – [UTF-8でASPスクリプトを記述する場合の注意] k896951
行 1: 行 1:
 +
 +====== 019.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スクリプト
 +<code 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>
 +</code>
 +
 +wa02.asp - wa01.aspから送られてきた文字の表示ASPスクリプト
 +<code 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>
 +</code>
 +
 +今回は上記2ファイルを、
 +  * Windows2000Server
 +  * WindowsXP
 +  * WindowsServer2003
 +
 +の各サーバ上にコピーし、各サーバで稼動するIISで表示可能にしておく。
 +
 +
 +multipage.html - 各サーバのwa01.aspから送られてきた文字を表示するASPスクリプト
 +<code html>
 + <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>
 +</code>
 +
 +これはデスクトップにおいて、一画面で3つのサーバの結果を見られるようにする。
 +
 +==== 実行 ====
 +
 +まずは、multipage.html を表示します。\\
 +{{:documents:other:other-011-before.jpg?|}}
 +
 +
 +ここで、各フレームにOSのIISのバージョンが表示され、テキストボックスが表示されます。
 +この状態でテキストボックスに「キタキツネ」と入力し、ボタンを押してみます。
 +{{:documents:other:other-011-after.jpg?|}}
 +
 +
 +
 +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を指定します。
 +
 +<del>[[http://msdn.microsoft.com/workshop/database/tdc/reference/charset.asp|参考(MSDN)]]</del> リンク先が変わってフォローできません
 +
 +<code>
 + <%@LANGUAGE="JavaScript" %>
 +   ↓
 + <%@LANGUAGE="JavaScript" CODEPAGE=65001 %>
 +</code>
 +
 +とします。結果は、
 +
 +{{:documents:other:other-011-finish.jpg?|}}
 +
 +この様に正しく文字が表示されます。
 +
 +{{tag> Windows ASP 技術資料}}
  
documents/other/memo01/other-011.txt · 最終更新: by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki