I write this note in Japanese, because this note will helps Japanese character set problem.
MySQLでの日本語の文字化け
Dockerなんかで動いているMySQLにログインして、SELECTしてみると、日本語が文字化けして読めないなんてことがあるかと思います。
たとえば、こんな感じです。
mysql> select post_type, post_title from wp_posts where ID = 21787;
+-----------+--------------+
| post_type | post_title |
+-----------+--------------+
| blog | ????????BBQ! |
+-----------+--------------+
1 row in set (0.00 sec)
文字コードを調べてみると、latin1という日本語が使えなさそうな文字コードになっています。
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
このセッションで使う文字コードをutf8にして、日本語が表示できるようにしましょう。
mysql> CHARSET utf8;
Charset changed
再度、さきほどのレコードを取り出してみます。
mysql> select post_type, post_title from wp_posts where ID = 21787;
+-----------+--------------+
| post_type | post_title |
+-----------+--------------+
| blog | たのしいBBQ! |
+-----------+--------------+
1 row in set (0.00 sec)
補足: (試してませんが)今後は絵文字対応などが入ってきますので、 CHARSET utf8mb4
のほうがいいかもしれません。
Docker環境内のRails consoleの日本語文字化け
Dockerfile
の環境変数LANGにUTF-8を設定します。
FROM ruby:2.6.3
# railsコンソール中で日本語入力するための設定
ENV LANG C.UTF-8
binding.pryでの日本語の文字化け
🤔状況
日本語を入力すると「文字コード変換が定義されていない」エラーが出てしまう。
Encoding::UndefinedConversionError:
"\xE3" from ASCII-8BIT to UTF-8
🦄 基本的な対応
pryのヒストリを使わなくする(参考)。
# ~/.pryrc
Pry.config.history.should_save = false
ただし、「rb-readline」というgemを使っている場合は、うまくいかないので次の方法を試してください。
👍 再インストール
まずは普通にアンインストールする
rbenv uninstall 2.x.x
次に、以下のようなオプションをつけてrbenvでインストールを行います。
# CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline`" rbenv install 2.x.x
RUBY_CONFIGURE_OPTS=--with-readline-dir=`brew --prefix readline` rbenv install --verbose 2.x.x
🦄 最終手段
NKFを使う
[2] pry> find("���������������") #=> Encoding::UndefinedConversionError: "\xE8" from ASCII-8BIT to UTF-8
[4] pry> Encoding.default_external #=> #<Encoding:UTF-8>
[5] pry> require 'nkf' #=> false
[6] pry> Encoding.default_internal #=> #<Encoding:UTF-8>
[7] pry> 'a'.encoding #=> #<Encoding:UTF-8>
[8] pry> '���'.encoding #=> #<Encoding:ASCII-8BIT>
click_link NKF.nkf('-w','リンクをクリックしてください')
また問題を見つけたら、追記していきたいと思います。
Top comments (0)