🐞

Ubuntu, Zsh環境で文字化け問題に遭遇したときの対処方法

2020/10/14に公開

症状

Ubuntu (20.04 LTS) +zsh (+tmux)のような環境での開発環境を構築した際、次のようなトラブルに遭遇することがある。
ターミナル上で全角文字を入力しようとするが、実際に入力される文字が <ffffffff><ffffffff><ffffffff> のような形で文字化けが起きてしまい、実際に入力されない。

という問題である

# あ と入力しようとすると次のような文字化けが起こる
$ <ffffffff><ffffffff><ffffffff>

例えば、以下のような過去のトラブルシューティングがネット上で見られた。
https://bbs.archlinux.org/viewtopic.php?id=220463

解決方法

文字化けの問題は大概ロケール(環境変数LC_xxxxの設定)に起因するのである。
Ubuntuにおいては locale-fix というコマンドが用意されており、これがシェルの起動時に良しなに設定の問題を解決してくれる。

例えば以下のようなコマンドにより、不適切なロケール設定を修復してくれる。

$ eval $(/usr/bin/locale-check C.UTF-8)

このコマンドはデフォルトシェルであるbashの際には /etc/profile に組み込まれているため起動時に呼び出されるものの
zshのようにカスタマイズしたデフォルトシェルを利用している場合には初期設定では呼び出されないため、症状のような問題が生じるという筋書である。

問題の解決のためには、起動時にこのスクリプトを呼び出すように設定すればよい。
zshの場合には、bashの /etc/profile に対応する設定は /etc/zsh/zprofile (2020現在) が用意されているため、こちらに設定をコピーするよい。

$ ln -sf /etc/profile /etc/zsh/zprofile

Discussion