Unicode を使用するサーバーと Unicode 以外を使用するクライアント間のデータ変換の管理
このトピックでは、サーバー側のデータ ストレージが Unicode で、そのデータにアクセスするクライアント アプリケーションが特定のコード ページを使用している場合に、文字データの整合性を保つ方法について説明します。
データ入力
Unicode 以外のデータをクライアントから送信し、そのデータがサーバーでは Unicode で保存されるときに、以下のいずれかの条件を満たしている場合、クライアントやコード ページの種類を問わず、データは正しく保存されます。
- 文字列が RPC (リモート プロシージャ コール) のパラメータとしてサーバーに送信される場合。
- 文字列定数が大文字の N で始まっている場合。クライアント アプリケーションが Unicode 対応であるかどうかにかかわらず、文字列定数の先頭は N にする必要があります。SQL Server では、N プレフィックスがないと、文字列はデータベースの既定の照合順序に対応するコード ページに変換されます。文字列がこのコード ページにない場合は、失われます。
データ取得
Unicode に対応していないクライアント アプリケーションが、データを Unicode 以外のバッファに取得する場合、クライアント コンピュータのコード ページで表現できるデータしか取得または変更できません。つまり、ASCII 文字表現はすべてのコード ページで同じなので、ASCII 文字は常に取得できます。ASCII 以外のデータは、各コード ページ間の変換により取得できるかどうかが決まります。
たとえば、現在米国内だけで運用されているアプリケーションがあり、これが日本に配置されることになったとします。SQL Server データベースは Unicode に対応しているので、Unicode でテキストを処理できるようにアプリケーションが変更されていなくても、英語と日本語の両方のテキストを同じテーブルに保存できます。アプリケーションが上記の 2 つの条件のいずれかを満たしている限り、日本のユーザーは Unicode 非対応のアプリケーションを使用して日本語データの入力や取得が可能で、米国のユーザーは英語データの入力や取得が可能です。どちらのユーザーのデータもすべてそのままデータベースの同じ列に保存され、Unicode で表現されます。この場合、データセットすべてに対応したレポートを生成する Unicode 対応のレポート アプリケーションを配置できます。ただし、アプリケーションでは英語ユーザーが使用するコード ページ (1252) に存在しない文字を表示できないので、英語ユーザーは日本語の行を表示することはでできません。
英語のユーザーと日本語のユーザーが相手のレコードを表示する必要がなければ、このような状態でも問題ありません。1 つのコード ページでは表現できないテキストを含むレコードを表示または変更できる必要がある場合は、アプリケーションを変更して Unicode を使用できるようにする以外に方法はありません。
Web ベースのアプリケーション
クライアント側のプログラムが Web ベースのプログラムか、ASP (Active Server Pages) ページに接続するプログラムの場合、クライアント側の HTML ページとサーバー側の ASP ページの両方に、メタデータが指定されます。サーバーの ASP エンジンとクライアントのブラウザ間でどのように文字列を変換するかを指定するために、このようなメタデータ指定が必要です。
クライアント側の HTML ページでは、META 属性で CHARSET コードを指定して、文字セット データがクライアントのエンコード形式に変換されるように指定する必要があります。たとえば、次の HTML ページでは、big5
を CHARSET
コードに指定して、950 (中国語繁体字) コード ページに文字データを変換するようにクライアントに通知しています。META 属性の文字セット コードを確認するには、Microsoft Web サイトを参照してください。
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=big5">
<!--
-->
</HEAD>
<BODY>
<!--
body
-->
</BODY>
</HTML>
サーバー側の ASP ページでは、クライアント ブラウザが使用しているコード ページを ASP Web アプリケーションに通知する必要があります。Session.CodePage
プロパティを指定するか、@CodePage ディレクティブを指定します。いずれの方法でも、サーバーからクライアントへのデータ変換、および GET と POST のクライアント要求が処理されます。次の例では、これら 2 つの方法を使用して、クライアントのコード ページ (950
(中国語繁体字)) を相互に変換するように指定しています。
<%@ Language=VBScript codepage=950 %>
<% Session.CodePage=950 %>
なお、文字列リテラルの先頭に文字 N を指定することを忘れないでください。
参照
概念
クライアントとサーバーのコード ページ間のデータ変換の管理
Unicode エンコード体系間のデータ変換の管理