Delphi Unicode サロゲートペアの 要素番号と文字番号

今更ですが Delphi Unicode サロゲートペアの 要素番号 と 文字番号 を表にしてみた
文字列は→

コード
ページ
要素
サイズ
参照
カウンタ
要素数文字列
null
12002--6"A""B"#$D840#$DC0B"で""す"
要素番号(Element index)
123456← Length Copy Pos 等で扱われる Index
文字番号(Char index)
123345← ElementToCharIndex(S, ElementIndex)

サロゲートペアを含む文字列は、SJIS時代の2バイト文字と似た扱いです
サロゲートペアのために割り当てられた範囲が限定されているため、SJISにあった、リードバイトに続くトレイルバイトにASCIIコードやリードバイトを含むため、ASCII文字列を検索するとトレイルバイトがヒットしたりという問題はありません

ElementToCharIndex 等↓の関数を用いて Element Index ⇔ Char Index を行き来することとなります

【参考
ElementToCharIndex
ElementToCharLen
CharToElementIndex


コメント