[HMM0073A]
●文字列をバイト単位ではなく文字単位で扱う
- 「strlen」等の文字列操作関数はバイト単位となっていますが、文字単位で扱うことはできないでしょうか? 1バイト文字と2バイト文字が混在している時に、とても困ります。
秀丸エディタ Ver.8以降は、文字列をunicode(正確にはUTF-16LE)として扱う関数群が追加されています。
- wcslen
- wcsleftstr
- wcsrightstr
- wcsmidstr
- wcsstrstr
- wcsstrrstr
この関数群を使用すれば、半角、全角問わずに文字単位で、文字列を操作可能です。 ただし、UTF-16LEなので、コードポイントが、U+10000 から U+10FFFFの範囲は、 サロゲートペアを使って表現するため、1文字でも2文字扱いになります。
Unicode(UTF-16LE)ベースで文字単位で扱うには、
- サロゲートペア
- 結合文字列(基底文字 + 結合文字)
- 異字体セレクタ(文字 + 異字体セレクタ(U+E0100 to U+E01EF))
等があるので、全て考慮しようとするとかなり難しい事になります。