WindowsVista対策方法
WindowsVistaではJIS X 0213:2004の対応が行われているため、各種アプリケーションモジュールにて
文字セットの考慮などが必要になります。
(文字セットについてはVista文字とチェック方法もご覧ください)
このドキュメントでは Webtribe/VisualFrameで作成されたアプリケーションでのWindowsVista対応方法についてのご案内です。
対応方法の選択
Webtribe/VisualFrameでの対応
MS932の文字 に限定する
この場合、入力文字が MS932の文字 のみになるようにチェックをかけ、それ以外(サロゲートペアや結合文字、拡張文字)は入力
されない という方法です。
MS932の文字 に限定するのは、現時点では一番現実的な対応策になりますので、
この方法を選択されるパターンが一番多いかと思います。
この場合は、以下のタイミングのいづれかにチェックを入れることになります。
- GUI入力時
- SwingGUIもしくはHTMLで入力文字をチェックする。
- CAMCの場合はチェッククラス、HTMLの場合にはJavaScript。
- ファイル入力がある場合には別途処理が必要ですので、注意してください。
- 送受信モジュール
- Webtribeの場合、Exchanger の中にチェック処理を組み込む。
- VisualFrameの場合、通信用ロジッククラスの中にチェック処理を組み込む。
- サーブレット
- サーブレットフィルタなどを使用する。
GUIでの入力値チェック では、入力項目全てに文字のチェックを入れることになります。
Webtribe/VisualFrameでは、入力項目チェックは チェックラス にて行っていますので、
チェッククラスにて、MS932の文字 のみになるようにチェック 処理を追加する必要があります。
この対応として製品機能に"チェッククラス-Library変更機能"が追加されました。
詳しくはチェッククラス-Library変更機能を参照してください。
GUIでの入力値チェックでは全てチェックできない(たとえば、JavaScriptがOffになっているため、JavaScriptでのチェックがかけられない
場合がある など) もしくは 負担が大きい などの場合、送受信モジュール や サーブレットフィルタでチェックを行う対策方法も考えられます。
ただし、サーバ側でチェックを行う場合には、送受信のエンコーディングはUnicode系(UTF8,UTF16など)にする必要があります。
MicrosoftIMEにて変換する文字を制限するオプションも用意されているようです。
クライアント端末ごとに設定が必要になると思われますが、この設定を行うのもお勧めします。
詳しくはMicrosoftのサイトを参照してください。
Microsoft:JIS X 0213:2004 対応と新日本語フォント「メイリオ」について
JIS X 0213でサロゲートペア以外を使用する
JIS X 0213で追加された新人名用漢字を使わないといけない が サロゲートペアは除きたい 場合の対応です。
この対応の場合、チェックのタイミングは
JIS X 0208+ASCII に限定すると同様ですが、プラスアルファとして
以下の考慮が必要になります。
- ファイルエンコード
- ファイル読み書きをしている場合、ファイルエンコードをUTF8/UTF16を使用する必要があります。
- データベースの文字セット
- 現状がUnicode系文字セットではない場合には、データベースの文字セットをUTF8/UTF16に変更する必要があります。
- OracleはVersion10.1.0以降からJIS X 0213に対応しています。文字セットはAL32UTF8を使用します。
- PostgreSQLはVersion8.1.7,8.2.2以降からJIS X 0213に対応しています。
- MySQLはUTF8の1文字あたりのバイト数が最大3Byteのため、サロゲートペアは使用できません。
- 詳しくは、各種データベースの仕様をご確認ください。
- 送受信文字セット
- 文字を送受信する際の文字セットをUTF8/UTF16にする必要があります。
入力されたJIS X 0213文字を判定するためには、文字の長さはコードポイント単位での判定、バイト数はUTF-8/UTF-16 のエンコードでの判定 をする必要があります。
WindowsXPなどのクライアント端末には Microsoft:Windows XP および Windows Server 2003 向けJIS2004 対応 MS ゴシック , MS 明朝フォントパッケージについて により、フォントパッケージをインストールします。
JIS X 0213を使用する
サロゲートペアを含む JIS X 0213 を使用する場合、 JIS X 0213でサロゲートペア以外を使用する に加えて、 以下の考慮が必要になります。
- プログラムに変更
- サロゲートペアを考慮したプログラムに変更する必要があります。
- 他フレームワーク
- Struts,Spring などの他フレームワークを使用している場合、そのフレームワークが サロゲートペアを考慮したものになっているかを確認する。
- データベースのカラムサイズ
- データベースの文字セットをUTF8/UTF16にし、カラムサイズを考慮する必要があります。
- データベースの文字列操作関数
- データベースの文字列操作関数でのサロゲートペアの扱い確認する必要があります。
入力されたJIS X 0213文字を判定するためには、文字の長さはコードポイント単位での判定、バイト数はUTF-8/UTF-16 のエンコードでの判定 をする必要があります。
WindowsXPなどのクライアント端末には Microsoft:Windows XP および Windows Server 2003 向けJIS2004 対応 MS ゴシック , MS 明朝フォントパッケージについて により、フォントパッケージをインストールします。
Webtribe-CAMCの場合
文字チェック方法
CAMCの場合、チェッククラスによりDMC/データ型による文字の判定や、長さのチェックを行います。
Vista対策(JIS X 0213対策)として、チェッククラス-Library変更機能 が追加されました。
製品標準チェッククラスを使用している場合、独自チェッククラス内で標準チェックメソッドをCallしている場合 であれば、
この機能を使用することにより、対応がをしやすくなります。
詳しくは チェッククラス-Library変更機能 を参照してください。
GUIコンポーネント種類別の扱い注意点
- 制限付きテキストフィールド/パスワードフィールド
-
GUIコンポーネントでは、バイト制限付きテキストフィールド、バイト制限付きパスワードフィールド については、
判定したい文字セットをConfigにて設定します。
桁数制限付きテキストフィールド、桁数制限付きパスワードフィールド については、サロゲートペアなどの考慮は されていません。
これらコンポーネントをご使用の場合には、リアルタイムチェックにてチェックを行うように 変更してください。 - FormattedTextField
-
FormattedTextFieldにてMaskFormatを使用している場合、 フォーマットの指定は文字数での指定 (たとえば、 「*-***」 であれば 「1文字 + - +3文字」)
で行いますが、サロゲートペア、結合文字を使用された場合 2文字の扱いになります。
言い換えると、「*-*」(1文字 + - + 1文字) のフォーマットにサロゲートペア文字を入力すると文字化けします。
この動きは、JavaSwingの動きになります。
MaskFormatを使用している箇所で日本語入力を想定している箇所があれば、サロゲートペア、結合文字 を入力させないようにしてください。 - 結合文字のレンダラ表示
-
テーブルレンダラ、コンボボックスのリストレンダラにて結合文字を表示すると、字幅のない補助文字が
一文字分の領域を使用した表示になることを確認しています。
たとえば、と表示してほしい文字が
で表示されます。
送受信の文字セット
JIS X 0213文字を使用する場合には、モジュール間の送受信文字コードについてもUTF-8/UTF-16などにする必要があります。
Webtribe/VisualFrameのCAMC(JavaSwing)にて動作は以下の順序でデータ送受信が行われてきます。
通信は、"UTF-8の文字セットを使用している" もしくは "オブジェクトを送信" しています。
そのため、JIS X 0213の文字を使用した場合でも通信時の指定はデフォルトの設定のままで構いません。
(1) | (2) | (3) | (4) | |||||
CAMC | <--> | RunServlet | <--> | SAMC | <--> | RunDB | <--> | DataBase |
- (1) CAMC - RunServlet
- 通信は HTTP で行われます。
- デフォルトはUTF-8でバイト配列に変換して通信を行います。そのため、特に修正しなくてもUnicode対応になっています。
- (2) RunServlet - SAMC
- 通信は RMI で行われます。
- デフォルトは文字列を格納したオブジェクト(SendObject)を渡します。
- RMIでオブジェクト送受信する際の文字セットはRMI仕様に依存しますが、内部でObjectOutputStreamが使用され、最終的にはwriteUTF()により出力されているようです。
- 設定により、UTF-8のバイト配列に変換して送受信することも可能です。
- UTF-8のバイト配列にする設定は、RunServlet.wdgにて <server name="RunApServer" refer="RunApServer" sendmode="object" > の sendmode を sendmode="bytearray" とします。
- (3) SAMC - RunDB
- 通信は RMI で行われます。
- 通信方法は (2) と同様になります。
- (4) RunDB - Database
- 通信は JDBC で行われます。
- 通信時の文字セットは、JDBCライブラリに依存します。
Webtribe-HAMCの場合
文字チェック方法
HAMC製品標準チェックでは CAMC同様にチェッククラスを使用しています。
チェッククラス-Library変更機能により対応を行うことができます。
ただし、チェッククラスでのチェックは サーバ側で行うチェック になりますので、サーバ側に正しい文字のまま
送信する必要があります。
言い換えると、4バイト文字をサーバ側でチェックするためには、HTMLをUTF8/UTF16に変更する必要があります。
サーバに送信前にチェックしたい場合(クライアント側でチェックしたい場合)には、JavaScriptでのチェックを埋め込む必要があります。
送受信の文字セット
WebtribeのHAMC(HTML)にて動作は以下の順序でデータ送受信が行われてきます。
(1) | (2) | (3) | (4) | |||||
HTML | <--> | HAMC | <--> | SAMC | <--> | RunDB | <--> | DataBase |
HTML --> HAMC以外の通信は、"UTF-8の文字セットを使用している" もしくは "オブジェクトを送信" しています。
そのため、JIS X 0213の文字を使用した場合でも通信時の指定はデフォルトの設定のままで構いません。
HTML --> HAMCの通信での文字セットはHTMLに依存しますので、注意が必要です。
- (1) HTML - HAMC
- 通信は HTTP で行われます。
- 送信文字セットは、HTMLに記述された文字コードに依存します。そのため、UTF-8を使用したい場合には、HTMLをUTF-8に変更する必要があります。
- HAMCでの受信時の文字セットは、デフォルトでは JISAutoDetect(自動判断)になります。ただし、文字により正しく判断できない場合もありますので、明示的に指定した方が望ましいです。設定はConfigにて行うことができます。
- 一方、サーバからブラウザにデータを返す時にはHTMLRegisterで設定した文字コードで HTMLドキュメントがバイト配列に変換されて、データが返ります。
- つまり、ShiftJISやMS932でHTMLを作成している場合で、JIS X 0213の文字を使用したい場合には、HTMLを UFT-8などに変更する必要があります。
- (2) HAMC - SAMC
- 通信は RMI で行われます。
- デフォルトは文字列を格納したオブジェクト(SendObject)を渡します。
- 設定により、UTF-8のバイト配列に変換して送受信することも可能です。
- UTF-8のバイト配列にする設定は、RunServlet.wdgにて <server name="RunApServer" refer="RunApServer" sendmode="object" > の sendmode を sendmode="bytearray" とします。
- (3) SAMC - RunDB
- 通信は RMI で行われます。
- 通信方法は (2) と同様になります。
- (4) RunDB - Database
- 通信は JDBC で行われます。
- 通信時の文字セットは、JDBCライブラリに依存します。
ToolClientでのリポジトリ入力
ToolClient(GUI)をWindowsVista上で動作させることは可能ですが、JIS X 0213対応は行っておりません。
JIS X 0213の文字は使用されないようにお願いします。
また、製品付属リポジトリDBのCreateTable(SQL文)についても、長さは 日本語1文字=2Byte にて作成しております。
そのため、リポジトリDBの文字セットをUTF8などにする場合には、TABLEカラムの長さを増やす必要があります。