QUESTION(SQ0106016)
ISQLやアプリケーションからのクエリ実行時、特定の日本語コードが化けてしまいエラーとなってしまう
ANSWER
この現象は、特にMicrosoft社 が SJIS に対して独自に拡張した文字コードを使用した際に発生する現象です。まず、使用されている漢字の文字コードをご確認ください。これは、文字コード範囲についての Adaptive Server Anywhere仕様に起因します。
使用される文字コードの範囲の定義は Anywhere では「照合(collation)」によって管理されています。Anywhere の Shift JIS 系(SJIS, SJIS2, CP932)の照合では、81〜9F および E0〜FCをダブルバイト文字の1バイト目、その他の文字をシングルバイト文字と定義しています。そのため、文字列中にWindows の拡張文字が入っている場合、ダブルバイト文字として認識されません。
例えば、 FDE6 というダブルバイト文字の場合、1バイト目の FD はシングルバイト文字と認識します。次の E6 はダブルバイト文字の1バイト目として定義されていますので、次の1バイトとセットで1文字とみなされます。もしも FDE6 という文字の次に、文字列を閉じるシングルクォーテーションがあった場合は、クォーテーションがなくなり、構文エラーとなってしまいます。
これらの Windows 拡張文字については、カスタム照合を作成することにより、ダブルバイト文字として認識させることが可能となります。
|