ソートマージ

[目次][用語][索引][前へ][次へ]

付録I.2 文字列データの扱い

<この項の構成>
(1) 文字の長さ
(2) 文字属性コードの特徴
(3) キー・項目の開始位置と長さの指定
(4) マルチバイト文字の端数処理
(5) ソート結果例
(6) IVS対応

(1) 文字の長さ

入力データの文字コード(エンコード)の種別によって,マルチバイト文字の1文字の長さは異なります。キー・項目の属性ごとの1文字の長さは,次の表のとおりです。

表I-3 エンコードと属性コードの関係

エンコード種別 1文字の長さ(単位:バイト)
c,q j w u,v
ASCII 1 1 1 1
SJIS 1 1 1 1,2
EUC-JP 1 1 1 1〜3
EUC-HJ 1 1 1 1〜2
UTF-8 1 1 1 1〜4
UCS-2LE 1 1 2 2
UCS-2BE 1 1 2 2
UTF-16LE 1 1 2 2,4
UTF-16BE 1 1 2 2,4
UCS-4LE 1 1 4 4
UCS-4BE 1 1 4 4
UTF-32LE 1 1 4 4
UTF-32BE 1 1 4 4

(2) 文字属性コードの特徴

文字データには,1バイトで比較する「c,j,q」,ワイド文字で比較する「w」,マルチバイトの文字単位の比較をする「u」および「v」の3種類の属性コードを用意しています。

「c」が最も処理効率が高く,「j,q」→「w」→「u,v」の順に処理効率が低下します。キー・項目データを構成する文字コードを確認し,最適な属性コードを指定してください。

表I-4 文字属性コードの特徴

処理速度 属性コード 特徴 最適エンコード

 
 
 
 
 

 
 
 
 
 

 
 
 
 
 
c
  • 1文字1バイトの最も単純な比較を実施します。
  • マルチバイト文字の文字構成や,エンディアンは考慮しません。

  • ASCIIコード
  • JIS8単位コード
  • UCS-2BE
  • UCS-4BE
  • UTF-32BE
j,q
  • 1文字1バイトで並び順序を変換して比較します。
  • マルチバイト文字の文字構成や,エンディアンは考慮しません。

  • ASCIIコード
  • JIS8単位コード
w
  • UCS-2,UCS-4,UTF-16,およびUTF-32は,2バイトおよび4バイトのワイド文字として比較します。また,little endianのエンコードは,big endianに正規化して比較します。
  • UCS-2,UCS-4,UTF-16およびUTF-32以外は,1文字1バイトで比較します。属性コード「c」と同じです。

  • UCS-2LE
  • UCS-4LE
  • UTF-32LE
u,v
  • ASCIIは,1文字1バイトで比較します。属性コード「c」と同じです。
  • SJISは,1バイト文字を2バイトに引き伸ばし,文字単位(1文字2バイト)の比較を行います。
  • EUC-JPは,1バイト文字および2バイト文字を3バイトに引き伸ばし,文字単位(1文字3バイト)の比較を行います。
  • EUC-HJは,1バイト文字を2バイトに引き伸ばし,文字単位(1文字2バイト)の比較を行います。
  • UCS-2とUCS-4は,2バイトおよび4バイトのワイド文字として比較します。また,little endianのエンコードは,big endianに正規化して比較します。属性コード「w」と同じです。
  • UTF-16は,Unicode(U+0000〜U+10FFFFの値)にデコードし,文字単位(1文字4バイト)の比較を行います。

  • SJIS
  • EUC-JP
  • EUC-HJ
  • UTF-8
  • UTF-16LE
  • UTF-16BE

(3) キー・項目の開始位置と長さの指定

(a) 開始バイト位置

キー・項目に指定した「+開始バイト位置」から,エンコードに従って文字解析します。

マルチバイト文字の途中を「+開始バイト位置」と指定した場合,そのマルチバイト文字を空白に置き換える端数処理を実行します。端数処理の詳細については,「付録I.2(4) マルチバイト文字の端数処理」を参照してください。また,エンコードが「SJIS」,「EUC-JP」および「EUC-HJ」の場合は,正しく文字解析ができない場合があるので注意してください。

(b) バイト長

指定された「−バイト長」をエンコードに従って文字解析します。

マルチバイト文字の途中までを「−バイト長」で範囲指定した場合,そのマルチバイト文字を空白に置き換える端数処理を実行します。端数処理の詳細については,「付録I.2(4) マルチバイト文字の端数処理」を参照してください。また,エンコードが「SJIS」,「EUC-JP」および「EUC-HJ」の場合は,正しく文字解析ができない場合があるので注意してください。

図I-1 開始バイト位置によって文字の解釈が異なる例(Shift_JIS)

[図データ]

1.文字「も(0x82E0)」の先頭からキーとして指定。

2.文字「も」の途中からキーとして指定。第2バイトの「0xE0」をShift_JISの第1バイトと解釈し,1バイトずつずれて解析されるので,正しく解釈できない。

3.文字「た(0x82BD)」の途中までをキーとして指定。第1バイトの「0x82」はASCII文字以外なので空白(0x20)を仮定する。

図I-2 開始バイト位置によって文字の解釈が異なる例(EUC-JP)

[図データ]

1.文字「や(0xA4E4)」の先頭からキーとして指定。

2.文字「や」の途中からキーとして指定。第2バイトの「0xE4」をEUC-JPの第1バイトと解釈し,1バイトずつずれて解析されるので,正しく解釈できない。5バイト目の「0xC0」はASCII文字以外なので空白(0x20)を仮定する。

3.文字「だ(0xA4C0)」の途中までをキーとして指定。第1バイトの「0xA4」はASCII文字以外なので空白(0x20)を仮定する。

(c) 文字数

テキストファイルとCSVファイルにだけ指定できる属性コード「u」および「v」では,キー・項目の長さを「文字数」で指定します。文字数の最小値は「1」文字で,最大「4,096」文字を指定できます。

なお,属性コード「u」および「v」では,キー・項目の長さを「バイト長」で指定できません。

(4) マルチバイト文字の端数処理

(a) 文字の比較単位

属性コード「c,j,q」は,指定したエンコードに関係なく1バイト単位で比較します。

ASCII,SJIS,EUC-JP,EUC-HJおよびUTF-8に指定した属性コード「w」は,1バイト単位で比較します。

属性コード「u,v」と,UCS-2,UCS-4,UTF-16およびUTF-32に指定した属性コード「w」は,文字単位で比較します。

表I-5 文字の比較単位

属性コード エンコード種別 比較単位 備考
c,j,q すべてのエンコード バイト
w ASCII,SJIS,EUC-JP,EUC-HJ,またはUTF-8 バイト
UCS-2LE,UCS-2BE,UTF-16LE,またはUTF-16BE 文字 UTF-16のサロゲートペア文字は2文字として扱う
UCS-4LE,UCS-4BE,UTF-32LE,またはUTF-32BE 文字
u,v すべてのエンコード 文字 UTF-16のサロゲートペア文字は1文字として扱う

(凡例)
−:該当なし

(b) 文字単位比較の端数処理

文字単位の比較では,次の表に示す最小構成バイトから比較文字数が決定されます。

表I-6 1文字の最小構成バイト

エンコード種別 最小構成バイト
ASCII,SJIS,EUC-JP,EUC-HJまたはUTF-8 1
UCS-2LE,UCS-2BE,UTF-16LEまたはUTF-16BE 2
UCS-4LE,UCS-4BE,UTF-32LEまたはUTF-32BE 4

例えば,エンコード「UTF-8」でキー長5バイトの属性コード「w」を指定した場合,UTF-8の最小構成バイトは「1バイト」なので「5÷1=5文字」の比較となります。

なお,「UCS-2」,「UCS-4」,「UTF-16」および「UTF-32」では,最小構成バイトの倍数でキー・項目の長さを指定しなければなりません。

エンコードが「UCS-2LE」,「UCS-2BE」,「UTF-16LE」または「UTF-16BE」のときは,「2の倍数」の長さを指定します。

エンコードが「UCS-4LE」,「UCS-4BE」,「UTF-32LE」または「UTF-32BE」のときは,「4の倍数」の長さを指定します。

例えば,エンコード「UCS-2LE」でキー長8バイトの属性コード「w」を指定した場合,UCS-2LEの最小構成バイトは「2バイト」なので「8÷2=4文字」の比較となります。

文字単位の比較では,比較文字数に満たないデータを入力した場合,右側に空白を加えて比較文字数に調整します。また,比較文字数を超えるデータを入力した場合,右側のあふれ部分は入力しません。

(c) バイト単位比較の端数処理

バイト単位の比較では,キー・項目の範囲がマルチバイト文字の途中であった場合,途中の文字を空白文字に置き換える端数処理を実行します。なお,この端数処理によって入力データが変更されることはありません。

属性コードによる端数処理の有無を「表I-7」に,また仮定する文字の種類を「表I-8」に示します。

表I-7 属性コードによる端数処理の有無

属性コード 途中文字の端数処理の有無
テキストファイル CSVファイル
c ×
q × ×
j × ×
w ×

(凡例)
○:端数処理を実行する
×:端数処理を実行しない

注※
CSVファイルの端数処理については,「付録B.2 文字列データの端数処理」もあわせて参照してください。

表I-8 仮定する文字の種類

エンコード種別 属性コード
q,j c,w
CSVファイル CSVファイル以外
ASCII
SJIS
EUC-JP
EUC-HJ
UTF-8
文字の置き換えなし 空白(0x20) 文字の置き換えなし
UCS-2LE
UCS-2BE
UCS-4LE
UCS-4BE
UTF-16LE
UTF-16BE
UTF-32LE
UTF-32BE

(凡例)
−:最小構成バイト単位(2または4バイト)の比較となるので該当しません

端数処理の例を次に示します。

図I-3 バイト単位比較の端数処理の例(codetype=SJISの属性コード「j」指定)

[図データ]

(端数処理)

項番 キー指定値 1レコード目 2レコード目
1 j+0-4 B1 B2 B3 B4 82 A0 82 A2
2 j+0-3 B1 B2 B3 82 A0 82
3 j+1-3 B2 B3 B4 A0 82 A2
4 j+1-2 B2 B3 A0 82

(凡例)
−:該当なし

属性コード「j」は端数処理を実行しません。

項番2の2レコード目のキー末尾は上位バイトの「0x82」が残ります。

項番3の2レコード目のキー先頭は下位バイトの「0xA0」が残ります。

項番4の2レコード目のキー先頭は下位バイトの「0xA0」が,キー末尾は上位バイトの「0x82」が残ります。


図I-4 バイト単位比較の端数処理の例(CSVファイル以外のcodetype=SJISの属性コード「c」指定)

[図データ]

(端数処理)

項番 キー指定値 1レコード目 2レコード目
1 c+0-4 B1 B2 B3 B4 82 A0 82 A2
2 c+0-3 B1 B2 B3 82 A0 82
3 c+1-3 B2 B3 B4 A0 82 A2
4 c+1-2 B2 B3 A0 82

(凡例)
−:該当なし

CSVファイル以外の属性コード「c」は端数処理を実行しません。属性コード「j」と同じ結果となります。詳細については,「図I-1 開始バイト位置によって文字の解釈が異なる例(Shift_JIS)」を参照してください。

項番2の2レコード目のキー末尾は上位バイトの「0x82」が残ります。

項番3の2レコード目のキー先頭は下位バイトの「0xA0」が残ります。

項番4の2レコード目のキー先頭は下位バイトの「0xA0」が,キー末尾は上位バイトの「0x82」が残ります。


図I-5 バイト単位比較の端数処理の例(CSVファイルのcodetype=SJISの属性コード「c」指定)

[図データ]

(端数処理)

項番 キー指定値 1レコード目 2レコード目
1 c+0-4 B1 B2 B3 B4 82 A0 82 A2
2 c+0-3 B1 B2 B3 82 A0 (20)

(凡例)
−:該当なし

CSVファイルの属性コード「c」は端数処理を実行します。途中文字を空白(0x20)に置き換えます。

なお,CSVのセルデータは,左端をそろえて入力するので,CSVキー・項目範囲の左側が途中文字となることはありません。

項番2の2レコード目のキー末尾は2文字目の途中なので,2文字目を空白に置き換えます。


図I-6 バイト単位比較の端数処理の例(codetype=SJISの属性コード「w」指定)

[図データ]

(端数処理)

項番 キー指定値 1レコード目 2レコード目
1 w+0-4 B1 B2 B3 B4 82 A0 82 A2
2 w+0-3 B1 B2 B3 82 A0 (20)
3 w+1-3 B2 B3 B4 (20) 82 A2
4 w+1-2 B2 B3 (20) (20)

(凡例)
−:該当なし

SJISに対する属性コード「w」は端数処理を実行します。途中文字を空白(0x20)に置き換えます。

項番2の2レコード目のキー末尾は2文字目の途中なので,2文字目を空白に置き換えます。

項番3の2レコード目のキー先頭は1文字目の途中なので,1文字目を空白に置き換えます。

項番4の2レコード目のキー先頭と末尾はどちらも文字の途中なので,1文字目と2文字目の両方を空白に置き換えます。


(5) ソート結果例

入力データのエンコードと属性コードによって,ソート結果が異なる例を次に示します。

図I-7 UTF-16 little endianの例

[図データ]

(ソート結果)

【例1】属性コード「c」のソート結果
入力レコード番号 入力キーデータ ソート結果
+0 +1 +2 +3
1 74 00 6F 00 2
2 84 FF 8B FF 3
3 DB 98 5A 9B 4
4 67 D8 49 DE 1
  • キー「c+0-4(キー位置0バイト目,キー長4バイト)」を指定した場合のソート例です。
  • 属性コード「c」はバイト単位で比較します。
  • 入力データのエンコードに「UCS-2LE」または「UTF-16LE」のどちらを指定しても,ソート結果は変わりません。

【例2】属性コード「j」のソート結果
入力レコード番号 入力キーデータ EBCDIK変換 ソート結果
+0 +1 +2 +3 +0 +1 +2 +3
1 74 00 6F 00 8B 00 75 00 2
2 84 FF 8B FF FF FF FF FF 4
3 DB 98 5A 9B BB FF E9 FF 3
4 67 D8 49 DE 67 AE C9 BE 1

注※
EBCDIKコード比較機能「-cmdopt EBCJ」オプションの指定あり。
  • キー「j+0-4(キー位置0バイト目,キー長4バイト)」を指定した場合のソート例です。
  • 属性コード「j」はバイト単位で比較します。
  • 正しくEBCDIK変換できるのは,ASCII対応文字の1番レコードだけです。
  • 入力データのエンコードに「UCS-2LE」または「UTF-16LE」のどちらを指定しても,ソート結果は変わりません。

【例3】属性コード「w」のソート結果
入力レコード番号 入力キーデータ Unicode比較 ソート結果
+0〜1 +2〜3 1文字 2文字
1 7400 6F00 U+0074 U+006F 1
2 84FF 8BFF U+FF84 U+FF8B 4
3 DB98 5A9B U+98DB U+9B5A 2
4 67D8 49DE U+D867 U+DE49 3
  • キー「w+0-4(キー位置0バイト目,キー長4バイト)」を指定した場合のソート例です。
  • 属性コード「w」は文字単位で比較します。
  • UCS-2の最小構成バイトは2バイトなので,比較文字数は「4÷2=2文字」です。
  • UCS-2では,4番レコードのサロゲートペア文字「[図データ]」を2文字として扱います。
  • 入力データのエンコードに「UCS-2LE」または「UTF-16LE」のどちらを指定しても,ソート結果は変わりません。

【例4】属性コード「u」のソート結果(codetype=UCS-2LE指定)
入力レコード番号 入力キーデータ Unicode比較 ソート結果
1文字 2文字 3文字 4文字 1文字 2文字 3文字 4文字
1 7400 6F00 6200 6900 U+0074 U+006F U+0062 U+0069 1
2 84FF 8BFF 9EFF 73FF U+FF84 U+FF8B U+FF9E U+FF73 4
3 DB98 5A9B U+98DB U+9B5A (U+0020) (U+0020) 2
4 67D8 49DE U+D867 U+DE49 (U+0020) (U+0020) 3

(凡例)
−:該当しません。
  • キー「u+0-4(キー位置0バイト目,キー長4文字)」を指定した場合のソート例です。
  • 属性コード「u」は文字単位で比較します。
  • UCS-2では,4番レコードのサロゲートペア文字「[図データ]」を2文字として扱います。
  • 3番と4番レコードのキーデータは2文字分のデータが入力されたと見なし,不足分に空白(U+0020)を仮定します。
  • 属性コード「w」と同じソート結果となります。

【例5】属性コード「u」のソート結果(codetype=UTF-16LE指定)
入力レコード番号 入力キーデータ Unicode比較 ソート結果
1文字 2文字 3文字 4文字 1文字 2文字 3文字 4文字
1 7400 6F00 6200 6900 U+0074 U+006F U+0062 U+0069 1
2 84FF 8BFF 9EFF 73FF U+FF84 U+FF8B U+FF9E U+FF73 3
3 DB98 5A9B U+98DB U+9B5A (U+0020) (U+0020) 2
4 67D8
49DE
U+29E49 (U+0020) (U+0020) (U+0020) 4

(凡例)
−:該当しません。
  • キー「u+0-4(キー位置0バイト目,キー長4文字)」を指定した場合のソート例です。
  • 属性コード「u」は文字単位で比較します。
  • UTF-16では,4番レコードのサロゲートペア文字「[図データ]」を1文字として扱います。
  • 3番レコードのキーデータは2文字,4番レコードのキーデータは1文字分のデータが入力されたと見なし,不足分に空白(0x20)を仮定します。

図I-8 UTF-8文字(codetype=UTF-8)の例

[図データ]

(ソート結果)

【例1】属性コード「c」のソート結果
入力レコード番号 入力キーデータ ソート結果
+0 +1 +2 +3
1 74 6F 62 69 1
2 EF BE 84 EF 3
3 E9 A3 9B E9 2
4 F0 A9 B9 89 4
  • キー「c+0-4(キー位置0バイト目,キー長4バイト)」を指定した場合のソート例です。
  • 属性コード「c」はバイト単位で比較します。

【例2】属性コード「j」のソート結果
入力レコード番号 入力キーデータ EBCDIK変換 ソート結果
+0 +1 +2 +3 +0 +1 +2 +3
1 74 6F 62 69 8B 75 62 69 1
2 EF BE 84 EF FF 8F FF FF 4
3 E9 A3 9B E9 FF 43 FF FF 2
4 F0 A9 B9 89 FF 49 89 FF 3

注※
EBCDIKコード比較機能「-cmdopt EBCJ」オプションの指定あり。
  • キー「j+0-4(キー位置0バイト目,キー長4バイト)」を指定した場合のソート例です。
  • 属性コード「j」はバイト単位で比較します。
  • 正しくEBCDIK変換できるのは,ASCII対応文字の1番レコードだけです。

【例3】属性コード「w」のソート結果
入力レコード番号 入力キーデータ ソート結果
+0 +1 +2 +3
1 74 6F 62 69 1
2 EF BE 84 (20) 3
3 E9 A3 9B (20) 2
4 F0 A9 B9 89 4
  • キー「w+0-4(キー位置0バイト目,キー長4バイト)」を指定した場合のソート例です。
  • UTF-8に指定した属性コード「w」はバイト単位で比較します。また,途中文字を空白(0x20)に置き換える端数処理を実行します。
  • 2番レコードおよび3番レコードのキーデータは2文字目の途中までなので,2文字目を空白に置き換えます。

【例4】属性コード「u」のソート結果
入力
レコード
番号
入力キーデータ Unicode比較 ソート結果
1文字 2文字 3文字 4文字 1文字 2文字 3文字 4文字
1 74 6F 62 69 U+0074 U+006F U+0062 U+0069 1
2 EFBE84 EFBE8B EFBE9E EFBDB3 U+FF84 U+FF8B U+FF9E U+FF73 3
3 E9A39B E9AD9A U+98DB U+9B5A (U+0020) (U+0020) 2
4 F0A9B989 U+29E49 (U+0020) (U+0020) (U+0020) 4

(凡例)−:該当しません。

  • キー「u+0-4(キー位置0バイト目,キー長4文字)」を指定した場合のソート例です。
  • 3番レコードのキーデータは2文字,4番レコードのキーデータは1文字分のデータが入力されたと見なし,不足分に空白(U+0020)を仮定します。

図I-9 日本語EUC文字(codetype=EUC-JP)の例

[図データ]

(ソート結果)

【例1】属性コード「c」のソート結果
入力レコード番号 入力キーデータ ソート結果
+0 +1 +2 +3 +4
1 74 6F 62 69 75 1
2 8E C4 8E CB 8E 2
3 C8 F4 B5 FB (00) 4
4 8F FD DD (00) (00) 3

注※
キー位置チェック緩和機能「-cmdopt POSNOCHK」オプションの指定あり。
  • キー「c+0-5(キー位置0バイト目,キー長5バイト)」を指定した場合のソート例です。
  • 属性コード「c」はバイト単位で比較します。
  • キー位置チェック緩和機能の指定があると,キーデータが不足していてもエラーにしません。3番レコードおよび4番レコードの不足バイトにNULL値(0x00)を仮定します。

【例2】属性コード「j」のソート結果
入力レコード番号 入力キーデータ EBCDIK変換※2 ソート結果
+0 +1 +2 +3 +4 +0 +1 +2 +3 +4
1 74 6F 62 69 75 8B 75 62 69 9B 1
2 8E C4 8E CB 8E FF 95 FF 9E FF 3
3 C8 F4 B5 FB (00)※1 99 FF 85 FF 00 2
4 8F FD DD (00)※1 (00)※1 FF FF BD 00 00 4

注※1
キー位置チェック緩和機能「-cmdopt POSNOCHK」オプションの指定あり。

注※2
EBCDIKコード比較機能「-cmdopt EBCJ」オプションの指定あり。
  • キー「j+0-5(キー位置0バイト目,キー長5バイト)」を指定した場合のソート例です。
  • 属性コード「j」はバイト単位で比較します。
  • キー位置チェック緩和機能の指定があると,キーデータが不足していてもエラーにしません。3番レコードおよび4番レコードの不足分にNULL値(0x00)を仮定します。
  • 正しくEBCDIK変換できるのは,ASCII対応文字の1番レコードだけです。

【例3】属性コード「w」のソート結果
入力レコード番号 入力キーデータ ソート結果
+0 +1 +2 +3 +4
1 74 6F 62 69 75 1
2 8E C4 8E CB (20) 2
3 C8 F4 B5 FB (00) 4
4 8F FD DD (00) (00) 3

注※
キー位置チェック緩和機能「-cmdopt POSNOCHK」オプションの指定あり。
  • キー「w+0-5(キー位置0バイト目,キー長5バイト)」を指定した場合のソート例です。
  • EUC-JPに指定した属性コード「w」はバイト単位で比較します。また,途中文字を空白(0x20)に置き換える端数処理を実行します。
  • 2番レコードのキーデータは3文字目の途中までなので,3文字目を空白に置き換えます。
  • キー位置チェック緩和機能の指定があると,キーデータが不足していてもエラーにしません。3番レコードおよび4番レコードの不足分にNULL値(0x00)を仮定します。

【例4】属性コード「u」のソート結果
入力
レコード
番号
入力キーデータ EUC-JP比較 ソート
結果
1文字 2文字 3文字 4文字 5文字 1文字 2文字 3文字 4文字 5文字
1 74 6F 62 69 75 74 6F 62 69 75 1
2 8EC4 8ECB 8EDE 8EB3 8EB5 8EC4 8ECB 8EDE 8EB3 8EB5 2
3 C8F4 B5FB C8F4 B5FB (20) (20) (20) 3
4 8FFDDD 8FFDDD (20) (20) (20) (20) 4

(凡例)−:該当しません。

  • キー「u+0-5(キー位置0バイト目,キー長5文字)」を指定した場合のソート例です。
  • 属性コード「u」は文字単位で比較します。
  • 3番レコードのキーデータは2文字,4番レコードのキーデータは1文字分のデータを入力されたと見なし,不足分に空白(0x20)を仮定します。

(6) IVS対応

(a) IVSとは

同じ意味の漢字文字を複数の字形で表現できる仕組みで,ISO/IEC 10646で規定されています。漢字を表すコードの直後にVS(Variation Selector,字形選択子)と呼ばれるコードを付加することで,その漢字の「異体字」を表現する方法です。

VSの範囲としてサロゲートエリア内の「U+E0100〜U+E01EF」が割り当てられており,UTF-16ではサロゲートペアでVSが表現されます。漢字を表すコードを「基底文字(Base Character)」と呼び,基底文字に付随するVSとあわせて「U+hhhhh;U+E01hh」と表現します。

同一文字コードの漢字でも,VSによってグリフ(印刷・画面表示イメージ)が異なる例を次の図に示します。

図I-10 VS(Variation Selector)なし「かつしかく」

[図データ]

図I-11 VS(Variation Selector)あり「かつらぎし」

[図データ]

図I-11にある「葛」+VS(U+E0102)を並べた文字符号列を「IVS」と呼びます。この文字は「葛」と同一文字であり,ほかのグリフも存在します(図I-12参照)。

図I-12 U+845BのVS例(IVD登録字形)

[図データ]

(b) SORT EEでのIVSの扱い

VS(Variation Selector)は,字体に“バリエーション”をつけるために付随するコードであり,文字データの本質部分ではありません。

文字の意味で分けた場合,前述の図I-10[図データ]」と図I-11[図データ]」は同じ文字を指します。また,文字の外観で分けた場合,「[図データ]」と「[図データ]」は異なる文字となります。

異体字を同字と扱う場合は属性コード「u」を指定します。また,異字と扱う場合は属性コード「v」を指定します。次の図に,属性コードによる比較結果の違いを示します。

図I-13 異体字の比較例

[図データ]