[HMM0073A] ●文字列をバイト単位ではなく文字単位で扱う - 秀丸エディタQ&A集

Hidemaru Editor

←前へ 次へ→ 機能別Q&A 質問番号順Q&A


[HMM0073A]

●文字列をバイト単位ではなく文字単位で扱う

Q.
「strlen」等の文字列操作関数はバイト単位となっていますが、文字単位で扱うことはできないでしょうか? 1バイト文字と2バイト文字が混在している時に、とても困ります。

A.

秀丸エディタ 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))

等があるので、全て考慮しようとするとかなり難しい事になります。


←前へ 次へ→ 機能別Q&A 質問番号順Q&A