Delphi Unicode サロゲートペアの 要素番号と文字番号
今更ですが Delphi Unicode サロゲートペアの 要素番号 と 文字番号 を表にしてみた
文字列は→
サロゲートペアを含む文字列は、SJIS時代の2バイト文字と似た扱いです
サロゲートペアのために割り当てられた範囲が限定されているため、SJISにあった、リードバイトに続くトレイルバイトにASCIIコードやリードバイトを含むため、ASCII文字列を検索するとトレイルバイトがヒットしたりという問題はありません
ElementToCharIndex 等↓の関数を用いて Element Index ⇔ Char Index を行き来することとなります
【参考】
ElementToCharIndex
ElementToCharLen
CharToElementIndex
文字列は→
コード ページ | 要素 サイズ | 参照 カウンタ | 要素数 | 文字列 |
null
| ||||||||
1200 | 2 | -- | 6 | "A" | "B" | #$D840 | #$DC0B | "で" | "す" | ||||
要素番号(Element index)
| 1 | 2 | 3 | 4 | 5 | 6 | ← Length Copy Pos 等で扱われる Index | ||||||
文字番号(Char index)
| 1 | 2 | 3 | 3 | 4 | 5 | ← ElementToCharIndex(S, ElementIndex) |
サロゲートペアを含む文字列は、SJIS時代の2バイト文字と似た扱いです
サロゲートペアのために割り当てられた範囲が限定されているため、SJISにあった、リードバイトに続くトレイルバイトにASCIIコードやリードバイトを含むため、ASCII文字列を検索するとトレイルバイトがヒットしたりという問題はありません
ElementToCharIndex 等↓の関数を用いて Element Index ⇔ Char Index を行き来することとなります
【参考】
ElementToCharIndex
ElementToCharLen
CharToElementIndex
コメント