last updated:2021/06/03

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


[HMM0073A]

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

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

A.

秀丸エディタ Ver.8以降は、文字列をUnicode(UTF-16LE)として扱う関数群が追加されています。

  • wcslen
  • wcsleftstr
  • wcsrightstr
  • wcsmidstr
  • wcsstrstr
  • wcsstrrstr

この関数群を使用すれば、半角、全角問わずに文字単位で、文字列を操作可能です。

ただし、UTF-16LE(16bit 0x0000 to 0xFFFF)なので、コードポイントが U+10000 を越えるとサロゲートペアを使って表現する必要がある為、上記関数群でも、1文字でも2文字扱いになります。

Unicode(UTF-16LE)ベースで文字単位で扱うには、

  • サロゲートペア
  • 結合文字列(基底文字 + 結合文字)
  • 異字体セレクタ(文字 + 異字体セレクタ(SVS:U+FE00 to U+FE0F、IVS:U+E0100 to U+E01EF))

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


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