irbでマルチバイト文字を扱う


背景

サーバ環境など、日本語環境が整っていない環境の場合、、irbでマルチバイト文字を扱うとエラーになる
(localeコマンドで LANG が設定されてなく、 posix になっているなど)

$ locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

VMやDockerなど他人の作ったイメージを利用するときは確認しておいたほうがいいかもです。

エラーと対応方法

rails console などで irb を立ち上げておもむろに日本語文字列を扱おうとすると、、
invalid multibyte char というエラーが出ます。

irb(main):001:0> name = 'ほげ'
SyntaxError: (irb):1: invalid multibyte char (US-ASCII)
...省略

utf-8で扱うことが限定であれば、以下のように環境変数を設定した後に rails console を立ちあげれば、マルチバイト文字も使えることができます。

export LANG=ja_JP.UTF-8

という日本語オンリーの環境だと起こらないことですが、たまにハマってしまうのでメモ。