データの照合順序
Shift-JISとUnicodeは、格納される文字コードが異なりますので、それぞれをキー項目としたデータの処理順序が異なることにより、プログラムの範囲抽出処理やバッチのグループ処理に影響がでる可能性があります。
また、SQLデータベースを利用する場合は、そのデータベースマネージャ固有の機能や設定による影響があります。
文字コードを比較した場合の文字種類別の順序は次の通りです。
Shift-JIS(文字型項目)のコード順序 |
Unicode(Unicode型)のコード順序 |
1.半角数字 |
1.半角数字 |
2.半角英 |
2.半角英 |
3.半角カナ |
3.ひらがな |
4.全角数字 |
4.カタカナ |
5.全角英 |
5.漢字 |
6.ひらがな |
6.全角数字 |
7.カタカナ |
7.全角英 |
8.漢字 |
8.半角カナ |
漢字については、個々の漢字のコード順序が異なります。 例えば、「亜」と「一」ではShift-JISとUnicodeで、次のようにコードの順序が異なります。
|
亜 |
一 |
結果 |
Shift-JIS |
0x889F |
0x88EA |
亜が一より先 |
Unicode |
U+4E9C |
U+4E00 |
一が亜より先 |
関数
文字列をパラメータに持つ関数に対して、文字型項目とUnicode型項目を設定した場合の戻り値は次のようなルールがあります。
SpecialAnsiExpression=Yが設定されていれば常に文字型(バイト単位)とします。
文字型/Unicode型のパラメータ数を数えます(それぞれを m, n とする) 。文字定数(*1)の場合はカウントしません。
n > 0 ならばUnicode型(文字単位)とします。
n = 0 かつ m > 0 ならば文字型(バイト単位)とします。
n = 0 かつ m = 0 であり、戻り値が文字型かUnicode型ならば、戻り値にあわせます。
n = 0 かつ m = 0 であり、戻り値が文字型/Unicode型以外であれば、デフォルトとして文字型(バイト単位)とします。
*1 式に直接、'あいうえお'などの文字列を指定する場合
ただし、IF関数およびCASE関数では、以下の扱いになります。
文字定数は、Unicode型と扱われます。
文字変数は、指定されたデータ型が優先されます。
関数を組み合わせて使用した場合には、それぞれの関数について上記のルールが適用されます。
例1. Len関数
文字列の長さを数える関数
書式: 戻り値 = Len(文字列)
項目Aが文字型項目で'あ'を格納した場合、Len(RTrim(A))の戻り値は2です。
項目BがUnicode型項目で'あ'を格納した場合、Len(RTrim(B))の戻り値は1です。
Len('あ')の戻り値は2です。
例2. MID関数
文字列の中から、指定された位置とサイズにあった文字列を取得する関数
書式: 文字の戻り値 = MID(文字列, 開始位置, 文字数)
# |
パラメータの型 |
戻り値の型 |
戻り値の結果 |
1 |
文字型 |
文字型 |
バイト単位に取得 |
2 |
文字型 |
Unicode型 |
バイト単位に取得 |
3 |
Unicode型 |
文字型 |
文字単位に取得 |
4 |
Unicode型 |
Unicode型 |
文字単位に取得 |
5 |
文字定数 |
文字型 |
バイト単位に取得 |
6 |
文字定数 |
Unicode型 |
文字単位に取得 |
例3. Rep関数
文字列中の位置と文字数を指定し、その部分を別の文字列に置き換える関数
書式: 文字の戻り値 = Rep(文字列1, 文字列2, 位置, 文字数)
# |
パラメータ1の型 |
パラメータ2の型 |
戻り値の型 |
戻り値の結果 |
1 |
文字型 |
文字型 |
文字型 |
バイト単位に取得 |
2 |
文字型 |
文字型 |
Unicode型 |
バイト単位に取得 |
3 |
文字型 |
Unicode型 |
文字型 |
文字単位に取得 |
4 |
文字型 |
Unicode型 |
Unicode型 |
文字単位に取得 |
5 |
Unicode型 |
文字型 |
文字型 |
文字単位に取得 |
6 |
Unicode型 |
文字型 |
Unicode型 |
文字単位に取得 |
7 |
Unicode型 |
Unicode型 |
文字型 |
文字単位に取得 |
8 |
Unicode型 |
Unicode型 |
Unicode型 |
文字単位に取得 |
9 |
文字型 |
文字定数 |
文字型 |
バイト単位に取得 |
10 |
文字型 |
文字定数 |
Unicode型 |
バイト単位に取得 |
11 |
Unicode型 |
文字定数 |
文字型 |
文字単位に取得 |
12 |
Unicode型 |
文字定数 |
Unicode型 |
文字単位に取得 |
13 |
文字定数 |
文字型 |
文字型 |
バイト単位に取得 |
14 |
文字定数 |
文字型 |
Unicode型 |
バイト単位に取得 |
15 |
文字定数 |
Unicode型 |
文字型 |
文字単位に取得 |
16 |
文字定数 |
Unicode型 |
Unicode型 |
文字単位に取得 |
Rep ('あいうえお',MID('かきくけこ',3,2),3,2)の結果をUnicode型項目に格納する場合、以下のように処理されます。
まず、MID('かきくけこ',3,2)について、文字型/Unicode型の判定が行われます。
パラメータ数がカウントされ、文字型 = 0個、Unicode型 = 0個 となります。戻り値の型にあわせて、Unicode型が返されます。
MID関数の結果(Unicode型)がRep関数のパラメータとなります。
次に、Rep ('あいうえお',Unicode型,3,2)について、文字型/Unicode型の判定が行われます。
パラメータ数がカウントされ、文字型 = 0個、Unicode型 = 1個 となります。これにより、Unicode型が返されます。
その他の関数の留意事項
文字型項目からUnicode型項目、またはUnicode型項目から文字型項目への代入、または項目更新処理を行う場合、内部で変換を行いますので、UnicodeFromANSI関数/UnicodeToANSI関数を使う必要はありません。
Mail関数(MailSend/MailMsgTextなど)は、Unicode特有の文字に対応していません。
その他
入出力ファイルのメディアにテキスト形式プリンタを設定した印刷処理では、Unicode特有の文字の印刷は対応していません。Unicode型データはGUI形式プリンタに設定して印刷してください。
メッセージコンポーネントに対して、Unicode型のパラメータを渡すことはできません。
フォーム入力で、UnicodeやUTF-8のファイルタイプの場合、文字型項目に入力すると文字列がカットされる場合があります。
フォーム出力で、ANSIのファイルタイプの場合、Unicode型項目を出力すると文字列がカットされる場合があります。
サロゲート・ペア文字(4バイトのUnicode文字)については、現在対応されておりません。