←前へ 次へ→
機能別Ｑ＆Ａ 質問番号順Ｑ＆Ａ 目次

# [HMM0073A]

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

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

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

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

  秀丸エディタ Ver.9以降は、「UCS-4単位」「秀丸単位(カーソル移動)」「書記素クラスター単位」で文字列操作する関数も追加されています。詳細はマクロヘルプの文字の単位を参照してください。「書記素クラスター単位」は「Windows 10 Version 1903 以降」のみ動作するとの事。

←前へ 次へ→
機能別Ｑ＆Ａ 質問番号順Ｑ＆Ａ 目次