Rubyで文字列の長さを得る(エンコードの違いを克服)

勉強会疲れで寝坊してぎりぎりで電車のってます.

結構当たり前だけど忘れてしまうことがあるので、Rubyと文字列サイズの返し方について少しだけブログ更新ということで・・・

onodes@onodes-asone:~$ irb -Ku
irb(main):001:0> a = 'オブジェクト指向プログラミング言語'
=> "オブジェクト指向プログラミング言語"
irb(main):002:0> a.length
=> 51

.length
.size
どっちでもいいのですが、文字数が51となっています.
Rubyでの.lengthは日本語の文字数ではなくバイト数を数えるため正しい文字数が返ってきません.

おそらくPythonだと
u'オブジェクト指向言語'とUTF-8指定をするんでしょう

Rubyで文字列の長さを得るには.splitを使います.

a = 'オブジェクト指向プログラミング言語'
a.split(//u).length
=> 17

これでとりあえず文字列の長さが返ってきます.

ちなみに現在の環境はLinux上なので文字コードUTF-8になっています.
Shift-jis環境だと.split(//s)とします.