DEV Community 👩‍💻👨‍💻

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

Posted on • Updated on

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

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

Top comments (0)

Here is a post you might want to check out:

Regex for lazy developers

Sorry for the callout 😆