Japanese Problem note (主に日本語の文字化け対応をまとめていくノート)
Tags: japanese, character
Published: 2019-09-12 13:23:34

---
title: Japanese Problem note (主に日本語の文字化け対応をまとめていくノート)
tags: japanese, character
series: note
published: true
canonical_url:
---

I write this note in Japanese, because this note will helps Japanese character set problem.

## MySQLでの日本語の文字化け
Dockerなんかで動いているMySQLにログインして、SELECTしてみると、日本語が文字化けして読めないなんてことがあるかと思います。

たとえば、こんな感じです。
```sql
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という日本語が使えなさそうな文字コードになっています。

```sql
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にして、日本語が表示できるようにしましょう。

```sql
mysql> CHARSET utf8;
Charset changed
```

再度、さきほどのレコードを取り出してみます。
```sql
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を設定します。

```shell
FROM ruby:2.6.3

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

## binding.pryでの日本語の文字化け
### 🤔状況
日本語を入力すると「文字コード変換が定義されていない」エラーが出てしまう。

```
Encoding::UndefinedConversionError:
       "\xE3" from ASCII-8BIT to UTF-8
```

### 🦄 基本的な対応
pryのヒストリを使わなくする（[参考](https://altarf.net/computer/rails/3222)）。


```
# ~/.pryrc
Pry.config.history.should_save = false
```

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


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

```sh
rbenv uninstall 2.x.x
```

次に、以下のようなオプションをつけてrbenvでインストールを行います。

```sh
# 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を使う

```ruby
[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','リンクをクリックしてください')
```



---

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