DEV Community

Cover image for Japanese Problem note (主に日本語の文字化け対応をまとめていくノート)
n350071🇯🇵
n350071🇯🇵

Posted on • Edited on

4 1

Japanese Problem note (主に日本語の文字化け対応をまとめていくノート)

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)
Enter fullscreen mode Exit fullscreen mode

文字コードを調べてみると、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)
Enter fullscreen mode Exit fullscreen mode

このセッションで使う文字コードをutf8にして、日本語が表示できるようにしましょう。

mysql> CHARSET utf8;
Charset changed
Enter fullscreen mode Exit fullscreen mode

再度、さきほどのレコードを取り出してみます。

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)
Enter fullscreen mode Exit fullscreen mode

補足: (試してませんが)今後は絵文字対応などが入ってきますので、 CHARSET utf8mb4 のほうがいいかもしれません。

Docker環境内のRails consoleの日本語文字化け

Dockerfile の環境変数LANGにUTF-8を設定します。

FROM ruby:2.6.3

# railsコンソール中で日本語入力するための設定
ENV LANG C.UTF-8
Enter fullscreen mode Exit fullscreen mode

binding.pryでの日本語の文字化け

🤔状況

日本語を入力すると「文字コード変換が定義されていない」エラーが出てしまう。

Encoding::UndefinedConversionError:
       "\xE3" from ASCII-8BIT to UTF-8
Enter fullscreen mode Exit fullscreen mode

🦄 基本的な対応

pryのヒストリを使わなくする(参考)。

# ~/.pryrc
Pry.config.history.should_save = false
Enter fullscreen mode Exit fullscreen mode

ただし、「rb-readline」というgemを使っている場合は、うまくいかないので次の方法を試してください。

👍 再インストール

まずは普通にアンインストールする

rbenv uninstall 2.x.x
Enter fullscreen mode Exit fullscreen mode

次に、以下のようなオプションをつけて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
Enter fullscreen mode Exit fullscreen mode

🦄 最終手段

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','リンクをクリックしてください')
Enter fullscreen mode Exit fullscreen mode

また問題を見つけたら、追記していきたいと思います。

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more