Rubyでマルチバイト文字列の長さを取得する方法を説明します。
半角文字ならば、Stringクラスのsizeメソッドやlengthメソッドを呼べば良いのですが、これらのメソッドはバイト数を返すのでマルチバイト文字列の場合は文字数と一致しません。
そこで、マルチバイト文字列の場合は、まず、文字列を1文字ずつに分割して配列に格納し、その配列の要素数を取得するという方法をとります。
次は、文字コードがUTF-8の場合のマルチバイト文字列の長さを取得するRubyスクリプトです。
p "abc".split(//u).size
p "あいう".split(//u).size
p "あいう".split(//u).size
splitメソッドで文字列を1文字ずつに分割して、sizeメソッドでその配列の要素数を取得しています。
splitメソッドの引数//uは文字列を1文字ずつに分割する正規表現です。文字コードがUTF-8の場合は//の後にuを置きます。文字コードがEUC-JPなら//eとなり、Shift_JISなら//sとなります。
このスクリプトを実行すると、以下のような結果になります。
3
3
3
半角文字でも、マルチバイト文字でも、正しい文字数が取得できていることがわかります。